我是新手Collection,根据我的知识,我已经覆盖了类中的hashCode()and Equals()方法Data,但是当我尝试搜索元素时,它给出了"未找到".为什么?请查看下面的代码,并帮助我找到错误.
import java.util.*;
public class WordCounter {
public static void main(String args[]) {
HashSet<Data> set=new HashSet<Data>();
set.add(new Data("this",2));
set.add(new Data("that",3));
set.add(new Data("which",6));
set.add(new Data("how",7));
System.out.println(new Data("how",7).hashCode());
set.add(new Data("hey",3));
set.add(new Data("me",5));
Iterator<Data> itr=set.iterator();
while(itr.hasNext()) {
Data d=itr.next();
d.display();
}
Data e=new Data("how",7);
System.out.println(e.hashCode()+"\t");
if(set.contains(e))
System.out.println("found");
else
System.out.println("not found");
}
}
Run Code Online (Sandbox Code Playgroud)
数据类:
class Data {
String word;
int fre;
public Data(String w,int f) {
word=w;
fre=f;
}
public void display() {
System.out.println(word+"\t"+fre);
}
public boolean equals(Data e) {
return this.word.equals(e.word) && this.fre == e.fre;
}
public int hashCode() {
return this.word.hashCode() + this.fre;
}
}
Run Code Online (Sandbox Code Playgroud)
也许你的equals方法没用过?
签名是
public boolean equals(Object obj);
Run Code Online (Sandbox Code Playgroud)
看来你有
public boolean equals(Data e);
Run Code Online (Sandbox Code Playgroud)
@Override如果要覆盖父方法(在本例中为java.lang.Object),请考虑添加注释
更新
将方法更改为此可解决此问题.
public boolean equals(Object d) {
Data e = (Data) d;
return this.word.equals(e.word) && this.fre == e.fre;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |