相关疑难解决方法(0)

如果哈希码不同,为什么HashSet允许相等的项?

HashSet的类有一个附加(对象o)方法,这是不从另一个类继承的.该方法的Javadoc说明如下:

如果指定的元素尚不存在,则将其添加到此集合中.更正式地,将指定的元素e这套如果此集合不包含任何元素e2,使得(e==null ? e2==null : e.equals(e2)).如果此set已包含该元素,则调用将保持set不变并返回false.

换句话说,如果两个对象相等,则不会添加第二个对象,并且HashSet将保持不变.然而,我发现,这是不正确的,如果对象ee2,有不同的哈希码尽管e.equals(e2).这是一个简单的例子:

import java.util.HashSet;
import java.util.Iterator;
import java.util.Random;

public class BadHashCodeClass {

    /**
     * A hashcode that will randomly return an integer, so it is unlikely to be the same
     */
    @Override
    public int hashCode(){
        return new Random().nextInt();
    }

    /**
     * An equal method that will always return true
     */
    @Override
    public boolean equals(Object o){
        return true; …
Run Code Online (Sandbox Code Playgroud)

java hashcode hashset

5
推荐指数
2
解决办法
6913
查看次数

标签 统计

hashcode ×1

hashset ×1

java ×1