How to delete from a list, while modifying the list
本问题已经有最佳答案,请猛点这里访问。
我正在尝试创建一棵哈夫曼树,并且正在尝试合并两棵树。如果不获得"并发修改异常",我就无法理解如何删除程序中的树,因为我正在迭代一个列表并试图同时从列表中删除。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | BinaryTree<Character, Integer> t1 = null; BinaryTree<Character, Integer> t2 = null; BinaryTree<Character, Integer> tFinal = null; int treeSize = TREES.size(); for (int i = 0; i < treeSize; i++) { for (BinaryTree<Character, Integer> t : TREES) { System.out.println("treeSize" + treeSize); System.out.println(t.getRoot().getElement() +" t.getRoot().getElement()"); // here I edited the merge function in Binary Tree to set // the new root // to have null value for value, and itemTwo for weight System.out.println(t.getRoot().getValue() +" weight of tree "); t1 = t; TREES.remove(t); } for (BinaryTree<Character, Integer> t : TREES){ t2 = t; System.out.println(t); } int weight = t1.getRoot().getElement() + t2.getRoot().getElement(); tFinal.merge(null, weight, t1, t2); } |
Java阻止您修改循环中的集合。您需要使用迭代器。
如果您想在遍历它的同时修改列表,则需要使用迭代器。
下面是一些这样的问题:
迭代集合,避免在循环中移除时发生ConcurrentModificationException
在不使用ConcurrentModificationException的情况下,如何在为每个循环迭代时修改集合?
您的代码无法编译,因此我们无法帮助您。但一般来说,解决这个问题的方法是使用
例如,这给出了一个并发修改异常:
1 2 3 4 |
但事实并非如此,它给了你想要的结果:
1 2 3 4 5 6 |
后者将输出"0"。
解决方案是将要删除的项存储在另一个列表中,然后在迭代之后删除它们。