Nez*_*rik 1 java hash overriding hashtable
这是生成字符串哈希码的默认算法:
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
然而,我想使用一些不同的、更简单的东西,比如添加每个字符的 ASCII 值,然后将它们全部相加。
当我对哈希表使用 put() 方法时,如何使其使用我创建的算法,而不是使用默认算法?
到目前为止,我不知道除了从头开始实现哈希表之外还能做什么。
Alb*_*ina 10
创建一个新类,并String在其中使用类型字段。例如:
public class MyString {
private final String value;
public MyString(String value) {
this.value = value;
}
public String getValue() {
return value;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyString myString = (MyString) o;
return Objects.equals(value, myString.value);
}
@Override
public int hashCode() {
// use your own implementation
return value.codePoints().sum();
}
}
Run Code Online (Sandbox Code Playgroud)
添加带有注释的equals()和hashCode()方法@Override。
注意:此处hashCode()仅对 ASCII 值进行操作。
之后,您将能够在所需的数据结构中使用新的类对象。在这里equals()您可以找到这些方法的详细说明以及和之间的合同hashCode()。
| 归档时间: |
|
| 查看次数: |
476 次 |
| 最近记录: |