java - 增强的 for 循环似乎会同时遍历所有元素。但这是应该的还是我的代码错误?

标签 java for-loop arraylist collections

抱歉,标题。我正在尝试编写一个程序,用相同大小的数组 B 中的元素替换数组 A 中的元素,同时还从数组 B 中删除这些元素。没什么花哨的,只是在考试前测试一下。

我尝试使用嵌套 for 循环来执行此操作,第一个是“传统 for 循环”,第二个是“增强 for 循环”,但由于某种原因,而不是用元素 0 替换数组 A 中的元素 0从数组 B 中,它用数组 B 中的元素 2 替换数组 A 中的所有元素。当尝试删除这些元素时,它给了我一个错误。知道为什么会发生这种情况吗?

输出包含在代码块中,因为如果不包含输出,stackoverflow 就不会让我发布。

第 30 行是“for(String s : list2)”。我取出了标题。

public class Test {
    public static void main(String[] args) {
        List<String> list1 = new ArrayList<>();
        list1.add("one");
        list1.add("two");
        list1.add("three");

        List<String> list2 = new ArrayList<>();
        list2.add("four");
        list2.add("five");
        list2.add("six");

        System.out.println(list1);
        System.out.println(list2);

        for(int i = 0; i < list1.size(); i++){
            for(String s : list2){
                list1.set(i, s);
                //list2.remove(i);
            }
        }
        System.out.println(list1);
    }
}

没有“list2.remove(i)”行的输出:

[one, two, three]
[four, five, six]
[six, six, six]

带有“list2.remove(i)”行的输出:

[one, two, three]
[four, five, six]
Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
    at java.util.ArrayList$Itr.next(ArrayList.java:859)
    at Test.main(Test.java:30)
C:\Users\izabe\AppData\Local\NetBeans\Cache\10.0\executor- 
snippets\run.xml:111: The following error occurred while executing this 
line:
C:\Users\izabe\AppData\Local\NetBeans\Cache\10.0\executor- 
snippets\run.xml:94: Java returned: 1

最佳答案

你把事情搞得太复杂了。您正在“手动”执行您正在使用的类已经实现的事情!

这里真正的答案是退后一步,研究 Collection 的接口(interface),或者更恰本地说,List为您提供接口(interface)。

你发现有这样的调用:

  • clear() :删除当前存储在集合中的所有元素
  • addAll() :将另一个集合的所有元素添加到另一个集合中

另请注意,您的异常(exception)几乎是不言自明的,除此之外,已在这里多次询问和回答,请参阅 here例如。这里真正的答案还是:不要寻求解释,而是要保持好奇心,并使用搜索引擎。

你通过自己征服世界来学习编程,而不是通过向别人寻求解释。

关于java - 增强的 for 循环似乎会同时遍历所有元素。但这是应该的还是我的代码错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56624793/

相关文章:

c# - 删除 ArrayList 中所有出现的项目

android - 从字符串数组中过滤数字并获取android中最后两个更大数字的索引

java - 使 arrayList.toArray() 返回更具体的类型

java - Java 中的 setOpaque()

java - 使用 java -jar 运行代码时如何打印 UTF8

java - 如何在 Java 中以编程方式初始化 1000 个字符串?

java - java中的嵌套foreach语句

java - Admob 与布局内容重叠

java - HashMap 对象引用混淆

vba - 根据模板和数据工作表生成多张发票