の私の理解によればArrayList
、デフォルトの容量は10であり、10を超えると、新しい容量で新しいオブジェクトが作成されます。
好奇心から、私は次のプログラムを入力hashcode()
してArrayList
オブジェクトをチェックしました:
public class TestCoreJava {
public static void main(String [] args){
ArrayList al = new ArrayList();
for(int i=0;i<15;i++){
al.add("Temp"+i);
System.out.println("Hashcode for "+i+" element "+al.hashCode());
}
}
}
上記のシナリオによるとArrayList
、デフォルトの初期容量を設定していない場合は10になります。そのため、11番目の要素を追加すると、新しいオブジェクトが作成され、の容量が増加しArrayList
ます。
ArrayList
オブジェクトのハッシュコードを印刷すると、hashcode()
毎回新しいハッシュコードが表示されます。
以下はo / pです。
Hashcode for 0 element 80692955
Hashcode for 1 element -1712792766
Hashcode for 2 element -1476275268
Hashcode for 3 element 1560799875
Hashcode for 4 element 1220848797
Hashcode for 5 element -727700028
Hashcode for 6 element -1003171458
Hashcode for 7 element -952851195
Hashcode for 8 element 607076959
Hashcode for 9 element 1720209478
Hashcode for 10 element -6600307
Hashcode for 11 element -1998096089
Hashcode for 12 element 690044110
Hashcode for 13 element -1876955640
Hashcode for 14 element 150430735
デフォルトの容量の概念によれば、10番目の要素hashcode()
までは、その時点まで新しいオブジェクトを作成する必要がないのと同じように印刷されているはずですが、そうではありません。
hashCode
のはArrayList
の関数であるhashCode
に格納されているすべての要素のsのArrayList
容量が変化すると、それはあなたが追加したり、要素またはそのハッシュコードを変更する方法の要素のmutate 1を削除するたびに変更したとき、それは変更されませんので、。
Java 8の実装はAbstractList
次のとおりです(実際にはで実装されています)。
public int hashCode() {
int hashCode = 1;
for (E e : this)
hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());
return hashCode;
}
ところで、これはのJavadocの中に表示される正確なコードであるhashCode()
のList
インタフェース:
int java.util.List.hashCode()
このリストのハッシュコード値を返します。リストのハッシュコードは、次の計算の結果として定義されます。
int hashCode = 1;
for (E e : list)
hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加