-5

我有两个清单。插入相同的值后,它hashCode是相同的。

List<Integer> list1 = new ArrayList<Integer>();
list1.add(1);
List<Integer> list2 = new ArrayList<Integer>();
list2.add(1);

System.out.println(list1.hashCode()==list2.hashCode()); // It print true

关于上面的例子,我有一个问题:

  • 为什么hashCode在两个不同List的s中是一样的?
4

2 回答 2

2

约定hashCode是如果两个对象比较相等,则它们的哈希码也必须相等(反之不必成立)。

这意味着第二种行为将是不合规的。如果您的 JDK 确实如此(我的没有),您应该向 JDK 的供应商提交错误。

于 2013-10-29T07:44:45.797 回答
2

查看源代码

539    public int hashCode() {
540        int hashCode = 1;
541        for (E e : this)
542            hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());
543        return hashCode;
544    }

你有两个列表null,根据源代码,你应该hashcode在两种情况下都得到相同的结果,如果不是,你的 JDK 有问题。

于 2013-10-29T07:50:14.567 回答