JavaのHashMapの8の内部

アントニービマルラジ:

私は、Java 8のHashMapの実装を経と疑問の下に到着しました。私はそれらを明確にするために助けてください。

  1. 私は、同じハッシュコードを持つノードは、リンクされたリストと同じバケットに追加される、と言う記事で読みました。これは、このリンクリストに新しいノードが尾トラバースを避けるために、尾insteadof頭に追加されると述べています。私はソースコードを参照する場合でも、新しいノードは、尾に追加取得されます。あれは正しいですか?
  2. 私は完全にこの変数MIN_TREEIFY_CAPACITYを理解していませんでした。それは、このくらいの数の後に、マップ全体が(ツリーへの配列から)ツリーに変換されますようにですか?
ピーターLawrey:

私はソースコードを参照する場合でも、新しいノードは、尾に追加取得されます。あれは正しいですか?

これは、古いバージョンでは、先頭に追加されます。しかし、多くの変更がないJava 8で行われました。

class A {
    static class SameHash {
        final int n;

        SameHash(int n) {
            this.n = n;
        }

        @Override
        public int hashCode() {
            return 1;
        }

        @Override
        public String toString() {
            return "SameHash{" +
                    "n=" + n +
                    '}';
        }
    }

    public static void main(String[] args) {
        HashSet<SameHash> set = new HashSet<>();
        for (int i = 1; i <= 4; i++)
            set.add(new SameHash(i));
        System.out.println(set);
    }
}

版画

[SameHash{n=1}, SameHash{n=2}, SameHash{n=3}, SameHash{n=4}]

注:キーは異なるハッシュコードを持つことができますが、同じバケツに終わることができます。

私は完全にこの変数MIN_TREEIFY_CAPACITYを理解していませんでした。それは、このくらいの数の後に、マップ全体が(ツリーへの配列から)ツリーに変換されますようにですか?

このカウントの後、バケットは、キーが提供されるツリーに変換され、 Comparable

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=184891&siteId=1