这是java main()方法:
public static void main(String[] args) {
HashSet set = new HashSet();
Mapper test = new Mapper("asd", 0);
set.add(test);
System.out.println(new Mapper("asd", 0).equals(test));
System.out.println(set.contains(new Mapper("asd", 0)));
}
Run Code Online (Sandbox Code Playgroud)
我的Mapper类是:
class Mapper {
String word;
Integer counter;
Mapper (String word, Integer counter) {
this.word = word;
this.counter = counter;
}
public boolean equals(Object o) {
if ((o instanceof Mapper) && (((Mapper)o).word == this.word)) {
return true;
}
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
结果是:
真正
假
根据HashSet规范,在这个方法中我读到:"如果此set包含指定的元素,则返回true.更正式地,当且仅当此set包含元素e时才返回true(o == null?e == null: o.equals(e))."
那么,任何人都可以解释我错在哪里吗?要么 ...?
谢谢.
您需要实现适当的hashCode()功能.
public int hashCode() {
// equal items should return the same hashcode
}
Run Code Online (Sandbox Code Playgroud)
Java utilites java.util包含许多依赖于散列的类.允许一个人在equals()他们认为合适时覆盖意味着必须正确覆盖hashCode()以匹配.
正确的实现hashCode()将为equals()返回true的任何两个对象返回相同的哈希值.散列相关函数在检查对象是否相等(以解决散列冲突)之前检查散列是否相等.
| 归档时间: |
|
| 查看次数: |
2628 次 |
| 最近记录: |