新しい要素を追加するたびにArrayListのhashCode()が変更されるのはなぜですか?

スヤッシュ:

の私の理解によれば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]

編集
0

コメントを追加

0

関連記事

分類Dev

ArrayListに追加された新しい要素が以前のすべての値を上書きするのはなぜですか?

分類Dev

Lua /マトリックスに新しい要素を追加すると、以前に追加した要素が上書きされるのはなぜですか?

分類Dev

ファイルを作成するたびに、拡張子に〜が追加された新しいファイルが作成されるのはなぜですか

分類Dev

新しいのにArrayList要素を追加しようとすると、プログラムがArrayList要素が存在すると言うのはなぜですか?

分類Dev

ArrayListから取得した同じ値が異なる値に変更されるのはなぜですか?

分類Dev

新しいものが追加されると、ArrayListのすべての要素が変更されますか?

分類Dev

新しい値を割り当てなかったのに、変数の値が変更されるのはなぜですか?

分類Dev

QXYSeries :: replace()を呼び出した後、size()がcapacity()を超えていないのに、QVectorのアドレスが変更されるのはなぜですか?

分類Dev

指定されたハンドルを変更する代わりに、hSetBufferingが新しいハンドルを返さないのはなぜですか?

分類Dev

新しいリストを追加すると、配列内のすべてのリストが変更されるのはなぜですか?

分類Dev

StringBuilderを変更するとhashCodeが変更されるのはなぜですか?

分類Dev

ToList()を追加しない限り、foreachでLinqグループ選択に加えられた変更が無視されるのはなぜですか?

分類Dev

列の値が変更されるたびに `dplyr`を使用して新しいグループを作成するにはどうすればよいですか?

分類Dev

hashCodeをオーバーライドするのに、this.hashCode()が使用されないのはなぜですか?

分類Dev

新しい列を追加するときにdata.tableがコピーされるのはなぜですか?

分類Dev

console.logが変更される前に変更された値を出力するのはなぜですか?

分類Dev

要素がすでにセットに含まれているのに、IndexSetが新しい要素が挿入されたと言うのはなぜですか?

分類Dev

新しい値が割り当てられずにこの参照が変更されたのはなぜですか?

分類Dev

新しい配列を変数に割り当てると、値ではなく参照が変更されるのはなぜですか?

分類Dev

以前に追加したすべての要素に関数が追加されるのはなぜですか?

分類Dev

なぜliquibaseはdiffChangelogの既存のコンテンツに新しい変更を追加するのですか?

分類Dev

DOMが変更された後、IEがDOM要素のinnerHTML / childrenを破棄するのはなぜですか?

分類Dev

再起動するたびにNICの名前が変更されるのはなぜですか?-Ubuntu 20.04 LTS

分類Dev

新しい要素が選択されたときにアクティブな<li>要素を変更するにはどうすればよいですか?

分類Dev

JComboBoxのitemStateChangedが変更されたときに2回呼び出されるのはなぜですか?

分類Dev

新しいjarをAWSEC2にアップロードすると、機能の変更が表示されないのはなぜですか

分類Dev

AngularのngForで、すでに作成されている要素が新しい要素のスタイルを継承するのはなぜですか?

分類Dev

ArrayListの要素の値を変更すると、他の要素の値が変わるのはなぜですか?

分類Dev

サブスクライブされた配列がまだ変更されていないのに、useEffectが呼び出されるのはなぜですか?

Related 関連記事

  1. 1

    ArrayListに追加された新しい要素が以前のすべての値を上書きするのはなぜですか?

  2. 2

    Lua /マトリックスに新しい要素を追加すると、以前に追加した要素が上書きされるのはなぜですか?

  3. 3

    ファイルを作成するたびに、拡張子に〜が追加された新しいファイルが作成されるのはなぜですか

  4. 4

    新しいのにArrayList要素を追加しようとすると、プログラムがArrayList要素が存在すると言うのはなぜですか?

  5. 5

    ArrayListから取得した同じ値が異なる値に変更されるのはなぜですか?

  6. 6

    新しいものが追加されると、ArrayListのすべての要素が変更されますか?

  7. 7

    新しい値を割り当てなかったのに、変数の値が変更されるのはなぜですか?

  8. 8

    QXYSeries :: replace()を呼び出した後、size()がcapacity()を超えていないのに、QVectorのアドレスが変更されるのはなぜですか?

  9. 9

    指定されたハンドルを変更する代わりに、hSetBufferingが新しいハンドルを返さないのはなぜですか?

  10. 10

    新しいリストを追加すると、配列内のすべてのリストが変更されるのはなぜですか?

  11. 11

    StringBuilderを変更するとhashCodeが変更されるのはなぜですか?

  12. 12

    ToList()を追加しない限り、foreachでLinqグループ選択に加えられた変更が無視されるのはなぜですか?

  13. 13

    列の値が変更されるたびに `dplyr`を使用して新しいグループを作成するにはどうすればよいですか?

  14. 14

    hashCodeをオーバーライドするのに、this.hashCode()が使用されないのはなぜですか?

  15. 15

    新しい列を追加するときにdata.tableがコピーされるのはなぜですか?

  16. 16

    console.logが変更される前に変更された値を出力するのはなぜですか?

  17. 17

    要素がすでにセットに含まれているのに、IndexSetが新しい要素が挿入されたと言うのはなぜですか?

  18. 18

    新しい値が割り当てられずにこの参照が変更されたのはなぜですか?

  19. 19

    新しい配列を変数に割り当てると、値ではなく参照が変更されるのはなぜですか?

  20. 20

    以前に追加したすべての要素に関数が追加されるのはなぜですか?

  21. 21

    なぜliquibaseはdiffChangelogの既存のコンテンツに新しい変更を追加するのですか?

  22. 22

    DOMが変更された後、IEがDOM要素のinnerHTML / childrenを破棄するのはなぜですか?

  23. 23

    再起動するたびにNICの名前が変更されるのはなぜですか?-Ubuntu 20.04 LTS

  24. 24

    新しい要素が選択されたときにアクティブな<li>要素を変更するにはどうすればよいですか?

  25. 25

    JComboBoxのitemStateChangedが変更されたときに2回呼び出されるのはなぜですか?

  26. 26

    新しいjarをAWSEC2にアップロードすると、機能の変更が表示されないのはなぜですか

  27. 27

    AngularのngForで、すでに作成されている要素が新しい要素のスタイルを継承するのはなぜですか?

  28. 28

    ArrayListの要素の値を変更すると、他の要素の値が変わるのはなぜですか?

  29. 29

    サブスクライブされた配列がまだ変更されていないのに、useEffectが呼び出されるのはなぜですか?

ホットタグ

アーカイブ