[英]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.