アントニービマルラジ:
私は、Java 8のHashMapの実装を経と疑問の下に到着しました。私はそれらを明確にするために助けてください。
- 私は、同じハッシュコードを持つノードは、リンクされたリストと同じバケットに追加される、と言う記事で読みました。これは、このリンクリストに新しいノードが尾トラバースを避けるために、尾insteadof頭に追加されると述べています。私はソースコードを参照する場合でも、新しいノードは、尾に追加取得されます。あれは正しいですか?
- 私は完全にこの変数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