-5

2 つのリストがあります。同じ値を挿入した後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

上記の例に関して、1 つの質問があります。

  • List2 つの異なるsで hashCode が同じなのはなぜですか?
4

2 に答える 2

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 に答える
2

2 つのオブジェクトが等しい場合、それらのハッシュ コードも等しくなければならないという契約がhashCodeあります (逆は成立する必要はありません)。

これは、2 番目の動作が準拠していないことを意味します。あなたの JDK が実際にそのように動作する場合 (私の場合はそうではありません)、JDK のベンダーにバグを報告する必要があります。

于 2013-10-29T07:44:45.797 に答える