覆盖Collection中的equals和hashCode

Dik*_*ant 2 java collections

我是新手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)

Nie*_*sen 6

也许你的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)