繁体   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