有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

哈希集中包含相等对象的java

你好,我发现了一个与收藏有关的问题

public class Person {
    private String name;

    public Person(String name){
        this.name=name;
    }

    public boolean equals(Object o){
        if(!(o instanceof Person))return false;
        Person p=(Person)o;
        return p.name.equals(this.name);
    }

    public static void main(String[] args) {
        HashSet<Person> hs=new HashSet<Person>();
        hs.add(new Person("Hi"));
        hs.add(new Person("Hi"));
        hs.add(new Person("Hi"));
        hs.add(new Person("Hi"));

        System.out.println("Elements"+hs.size());
    }
}

哈希集的大小为4。但它不需要是1吗?既然实现了equals方法,HashSet能否包含多个同名的Person对象

当hashcode方法未被覆盖时,所有Person对象是否都具有相同的hashcode


共 (1) 个答案

  1. # 1 楼答案

    .equals()是不够的。你需要^{}

    当你实施其中一项时,根据经验,一定要实施另一项

    遵守合同;特别是,同一类的两个实例.equals()必须具有相同的.hashCode()


    现在,正如它的名字所暗示的,一个HashSet依赖于。。。散列。在这种情况下,在.hashCode()的结果上。根据结果,它会将您添加的对象插入到不同的哈希桶中

    由于你的对象都有不同的散列码,它们最终会出现在四个不同的桶中