簡體   English   中英

在使用remove方法之前/之后重新填充arrayList的效果

[英]Effects of re-populating an arrayList before/after using remove method

為什么在使用remove方法之前重新填充數組會影響使用remove方法之后的內容?

我試圖從最高索引開始的ArrayList(逐元素)中刪除所有項目。 復制數組的原因是為了使我以后可以在其他代碼示例中(使用修改數組的方法)始終引用相同的數據集(此處未顯示)。

為什么這兩個代碼示例的輸出都不同?

    //populate arrrayList
    for (int i = 0; i<1000; i++ ){
        int randNum = rand.nextInt(1000);
        arrayList.add(randNum);
    }
    //create a identical arrayList for testing purposes
    for (int i = 0; i<1000; i++){
        testArrayList.add(arrayList.get(i));

    // ...some other arrayList accessor methods here 

    //re-populate the testArrayList with original random numbers
    for (int i = 0; i<1000; i++){
        testArrayList.add(arrayList.get(i));
    }
    System.out.println("Contents of al: " + arrayList);
    System.out.println("Contents of tal: " + testArrayList);
    System.out.println();

    // ArrayList remove (low index to high index)
    for (int i = 0; i < 1000; i++) {
        testArrayList.remove(0);
    }
    System.out.println("Contents of al: " + arrayList);
    System.out.println("Contents of tal: " + testArrayList);
    System.out.println();

在以上版本中,輸出顯示兩個數組都包含完全相同的元素-(意外)。

在下面的代碼中,我刪除了(我認為只是多余的)重新填充循環,並且輸出顯示標題為“ testArrayList”的第二個數組為空(符合預期)。

    //populate arrrayList
    for (int i = 0; i<1000; i++ ){
        int randNum = rand.nextInt(1000);
        arrayList.add(randNum);
    }
    //create a identical arrayList for testing purposes
    for (int i = 0; i<1000; i++){
        testArrayList.add(arrayList.get(i));

    }
    System.out.println("Contents of al: " + arrayList);
    System.out.println("Contents of tal: " + testArrayList);
    System.out.println();

    // ArrayList remove (low index to high index)
    for (int i = 0; i < 1000; i++) {
        testArrayList.remove(0);
    }
    System.out.println("Contents of al: " + arrayList);
    System.out.println("Contents of tal: " + testArrayList);
    System.out.println();

我認為第一個代碼示例中的重新填充循環只是一個冗余過程,在將元素從testArrayList中刪除之前,會將arrayList的內容復制到testArrayList中。 為什么在第一個示例中的循環之后的代碼之后似乎重新填充了testArrayList? 我希望這兩個代碼示例都能吐出相同的結果。 誰能解釋為什么第一個示例無法有效刪除testArrayList中的項目? 謝謝。

下面的代碼將1000個元素從arrayList添加到testArrayList

//create a identical arrayList for testing purposes
for (int i = 0; i<1000; i++){
    testArrayList.add(arrayList.get(i));

下面的代碼再次將相同的1000個元素從arrayListtestArrayList 不是 re-population ,而是在陣列中添加了更多內容

//re-populate the testArrayList with original random numbers
for (int i = 0; i<1000; i++){
    testArrayList.add(arrayList.get(i));
}

Re-population將使用set方法而不是add方法。

//re-populate the testArrayList with original random numbers
for (int i = 0; i<1000; i++){
   testArrayList.set(i,arrayList.get(i));
}

現在,當您從testArrayList刪除1000個項目時,該列表將為空。

合並@JBNizet注釋,將一個集合的所有元素添加到列表的最佳方法是調用addAll()方法,該方法將指定集合中的所有元素追加到此列表的末尾,順序為它們由指定集合的​​Iterator返回。

從列表中刪除所有項目的最好方法是調用arraylistclear()方法,該方法從該列表中刪除所有元素。 該調用返回后,該列表保證為空。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM