[英]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個元素從arrayList
到testArrayList
。 這不是 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返回。
從列表中刪除所有項目的最好方法是調用arraylist
的clear()
方法,該方法從該列表中刪除所有元素。 該調用返回后,該列表保證為空。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.