java - 对于 contains 我们是否应该覆盖 java 中 hashset 的 hashcode 和 equals

标签 java collections

<分区>

Possible Duplicate:
Overriding equals and hashCode in Java

对于 contains 我们应该覆盖 java 中 hashset 的 hashcode 和 equals 吗?

import java.lang.Math;
import java.util.HashSet;
class Hello{

    public String name= ""; 

    Hello(String name){
        this.name = name;   
    }


    public static void main(String args[]){

        Hello h1 = new Hello("first");
        Hello h2 = new Hello("second");
        Hello h3 = new Hello("third");
        Hello h4 = new Hello("fourth");
        Hello h5 = new Hello("fourth");

        HashSet hs = new HashSet(); 
        hs.add(h1);
        hs.add(h2);
        hs.add(h3);
        hs.add(h4);
        hs.add(h5);
        hs.add(h5);
        hs.add(null);

        System.out.println("elements in hashset"+hs);
        // System.out.println("elements in hashset"+hs.contains());
        System.out.println("elements in hashset"+hs.contains(new Hello("fourth")));

    } 

    /*public boolean equals(Object obj){
        System.out.println(name+"==========="+((Hello)obj).name);
        if(name.equals(((Hello)obj).name))
            return true;
        else
            return false;
    }*/

    public int hashCode(){    
        return name.hashCode();    
    }    
}

最佳答案

我没有看到有关该问题的任何详细信息,但是是的,您应该覆盖 hashCode() 和 equals() 以正确比较对象的集合。

关于java - 对于 contains 我们是否应该覆盖 java 中 hashset 的 hashcode 和 equals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5936022/

相关文章:

java - 在java中将字体的字符宽度设置为统一

java - (仅)下载 OpenJDK 并且不安装它

java - 无法使用asyncTask.cancel()

c++ - 在 Qt 中将 T 的集合转换为 QVariant 的集合

sorting - 集合排序自定义比较器

performance - Scala Collection 排序、sortWith 和 sortBy 性能

java - 如何在参数中传递类并使用其方法

java - 使用共享首选项覆盖以前的高分

Java 集合,无法用新值覆盖旧值

collections - 在 PowerShell 中展平数组