Java 如何使散列唯一
Java how to make the hash unique
我正在尝试创建一个抽象的 class 硬币,具有实例变量名称(一个字符串)、符号(java.awt.Image 类型)和散列(一个字符串。)问题是我需要使属性散列与默认 hashcode() 方法返回的散列不同,因此 Coin 的散列是唯一的。
abstract class Coin {
private String name;
private Image symbol;
private String hash;
}
您可以通过以下方式覆盖默认的 hashCode()
函数:
@Override
public int hashCode() {
// Unique hashcode generating function goes here
return hash;
}
一种方法可以使用 name.hashCode()+symbol.hashCode()
。
在我继续之前让您知道,由于 hash collision,哈希值可能永远不会 100% 唯一。
话虽如此,我假设您想要一个用于变量散列的唯一字符串(注意 java 中的 hashCode()
函数是不同的,因为它 returns 是一个 int)
有很多哈希算法,我通常在这种情况下用于统一的一种是MD5
有一个名为 DiguestUtility 的 Apache 实用程序 让生活变得轻松。
这里有一个使用的例子:
DigestUtils.md5(byte[] bytes);// --> returns a string of 32 char long
DigestUtils.md5(String s);// --> returns a string of 32 char long
...
仔细阅读文档中的方法,看看哪种方法更适合您。
我正在尝试创建一个抽象的 class 硬币,具有实例变量名称(一个字符串)、符号(java.awt.Image 类型)和散列(一个字符串。)问题是我需要使属性散列与默认 hashcode() 方法返回的散列不同,因此 Coin 的散列是唯一的。
abstract class Coin {
private String name;
private Image symbol;
private String hash;
}
您可以通过以下方式覆盖默认的 hashCode()
函数:
@Override
public int hashCode() {
// Unique hashcode generating function goes here
return hash;
}
一种方法可以使用 name.hashCode()+symbol.hashCode()
。
在我继续之前让您知道,由于 hash collision,哈希值可能永远不会 100% 唯一。
话虽如此,我假设您想要一个用于变量散列的唯一字符串(注意 java 中的 hashCode()
函数是不同的,因为它 returns 是一个 int)
有很多哈希算法,我通常在这种情况下用于统一的一种是MD5
有一个名为 DiguestUtility 的 Apache 实用程序 让生活变得轻松。
这里有一个使用的例子:
DigestUtils.md5(byte[] bytes);// --> returns a string of 32 char long
DigestUtils.md5(String s);// --> returns a string of 32 char long
...
仔细阅读文档中的方法,看看哪种方法更适合您。