在用Iterator去取集合元素的过程中(如Map、List),禁止使用集合本身的remove方法删除元素,用Iterator的remove()方法代替
否则会报异常java.util.ConcurrentModificationException。
java 代码
- List list = tree.getChildren();
- if (list != null) {
- Map map=new HashMap();
- Iterator iterator = list.iterator();
- RoleTreeNode childNode;
- RoleTreeNode leafNode;
- while (iterator.hasNext()) {
-
- childNode = (RoleTreeNode) iterator.next();
- if (!childNode.isNodeChecked())
- continue;
- List list1 = childNode.getChildren();
- if (list1 != null) {
- Iterator iterator1 = list1.iterator();
- while (iterator1.hasNext()) {
- leafNode = (RoleTreeNode) iterator1.next();
- if (leafNode.isNodeChecked()) {
- addBranchVersion(childNode.getIdentifier(),
- branchId, leafNode.getDescription());
-
-
- if(childNode.getChildCount()!=1)
- {
- iterator1.remove();
-
- }
- else
- {
- iterator.remove();
-
- }
- List rightList=rightTree.getChildren();
- boolean flag=false;
- for(int i=0;i<rightTree.getChildCount();i++)
- {
- RoleTreeNode rightNode=(RoleTreeNode)rightList.get(i);
- String rightNodeDes=rightNode.getDescription();
- if(rightNodeDes.equals(childNode.getDescription()))
- {
-
- childNode.getChildren().add(rightNode.getChildren().get(0));
-
- rightNode.getChildren().remove(0);
-
- rightNode.setDescription(childNode.getDescription());
- rightNode.setIdentifier(childNode.getIdentifier());
- rightModel.setNodeId(childNode.getIdentifier());
- leafNode.setNodeChecked(false);
- rightNode.getChildren().add(leafNode);
- flag=true;
- break;
- }
-
- }
- if(!flag)
- {
- RoleTreeNode newRightNode=new RoleTreeNode();
- newRightNode.setDescription(childNode.getDescription());
- newRightNode.setIdentifier(childNode.getIdentifier());
- newRightNode.setLeaf(false);
- newRightNode.setType(childNode.getType());
- newRightNode.setNodeChecked(false);
- leafNode.setNodeChecked(false);
- newRightNode.getChildren().add(leafNode);
- rightModel.setNodeId(childNode.getIdentifier());
- rightTree.getChildren().add(newRightNode);
- }
-
- break;
- }
- }
- }
- }
- map.put("leftTree",tree);
- map.put("rightTree",rightTree);
- return map;
- }
分享到:
相关推荐
2. 当使用 Iterator 来迭代访问 Collection 集合元素时,Collection 集合里的元素不能被改变,只有通过 Iterator 的 remove 方法来删除上一次 next 方法返回的集合元素才可以。否则将会引发 java.util....
Java集合使用Iterator删除元素 ...本文对Java集合使用Iterator删除元素进行了详细的介绍,通过示例代码展示了如何使用Iterator删除元素,并解释了Iterator的工作机制和使用注意事项。希望对大家的学习和工作有所帮助。
Java 中使用 Iterator 迭代器删除集合重复选项是非常重要的知识点,以下是对该知识点的详细解释。 Iterator 迭代器的介绍 Iterator 迭代器是 Java 中的一种设计模式,用于遍历集合中的元素。它提供了一种方式来...
当我们需要遍历`HashMap`中的所有元素时,通常会使用`Iterator`接口,它是Java集合框架的一部分,提供了对集合的迭代访问。 `Iterator`接口定义了三个基本方法:`hasNext()`、`next()`和`remove()`。`hasNext()`...
Iterator接口和ListIterator接口的使用可以带来很多便利,例如,使用Iterator接口可以遍历集合中的元素,而不管集合的具体实现类型,同时也可以使用ListIterator接口来控制迭代器的行为,例如,添加或删除元素。...
它定义了一些基本的方法,包括添加元素、删除元素以及获取`Iterator`等。`Iterator`接口和`Collection`接口之间的关系十分紧密。 ##### 1. `Collection`的主要方法 - **`boolean add(Object c)`**:向集合中添加一...
在Java编程语言中,`Iterator`接口是集合框架的核心部分,它允许我们遍历集合中的元素,而无需暴露集合的内部结构。这个设计模式被称为迭代器模式,它为访问聚合对象(如数组、集合等)提供了一种统一的接口。在本...
1. **避免暴露内部结构**:通过使用`Iterator`,开发者可以顺序访问集合中的元素,而无需了解集合的具体实现细节。这有助于保护集合内部的数据结构,使其更加安全可靠。 2. **多线程友好**:`Iterator`允许同一个...
`Iterator`接口是`Iterable`接口的一个方法`iterator()`返回的,它提供了访问集合元素的机制,包括遍历元素、删除元素等功能。`Iterator`有三个主要的方法:`hasNext()`用于检查是否还有更多元素,`next()`用于获取...
在使用Iterator模式时,需要注意以下几点: 1. **迭代器的获取**:通常,聚合对象会提供一个方法来获取迭代器实例。 2. **遍历操作**:迭代器提供了`hasNext()`方法来检查是否还有更多元素,以及`next()`方法来获取...
为了避免这种情况,可以使用`Collections.synchronizedList()`或`CopyOnWriteArrayList`等线程安全的集合类,或者在迭代时使用`Iterator`的`remove()`方法而不是集合的`remove()`方法。 8. **迭代器应用**: 迭代...
总的来说,这个资源提供了学习和实践Iterator设计模式的机会,加深了对Java集合框架的理解。通过模拟ArrayList的Iterator实现,我们可以更深入地掌握如何在实际编程中利用这一强大的工具。同时,这也为我们设计自己...
需要注意的是,这里使用`iterator.remove()`而不是`list.remove()`来删除元素,这可以避免并发修改异常。 ### 三、使用HashSet特性去除重复元素 这种方法利用了HashSet的特性,即HashSet不允许有重复的元素。将...
Java中的`Iterator`接口是Java集合框架的重要组成部分,它提供了遍历集合元素的机制。`Iterator`被设计用来遍历各种类型的集合,如ArrayList、LinkedList、Set等。在这个主题中,我们将深入理解`Iterator`的工作原理...
iterator 是最强大的,他可以随时修改或者删除集合内部的元素,并且是在不需要知道元素和集合的类型的情况下进行的。 当我们需要遍历不同的集合时,我们只需要传递集合的 iterator(如 arr.iterator()),这就实现...
当你想在迭代过程中删除元素时,应该使用`Iterator`的`remove()`方法,而不是直接调用集合的`remove()`方法。这样,`Iterator`会正确处理集合的内部状态,避免异常: ```java List<String> list = new ArrayList...
迭代器其实就是从集合中取元素的方式:每个集合都有取元素的方法,但是取元素不足以用一个方法来描述,所以就将取元素封装成一个 Iterator 接口类。每个集合都有迭代器。迭代器其实就是集合的内部类(该类实现 ...
- **定义**:`Iterator` 提供了一个遍历集合元素的方式,它是 `Collection` 接口中 `iterator()` 方法的返回类型。 - **基本方法**: - `hasNext()`:判断是否有下一个元素。 - `next()`:返回集合中的下一个元素...
### Map接口详解 #### 1. Map接口概览 ...通过以上对`Map`、`Set`、`Iterator`以及Java集合框架的详细介绍,我们不仅可以了解到这些接口和类的基本概念和使用方法,还能深入理解它们在实际编程中的应用价值。
迭代器设计模式是一种在软件工程中广泛使用的模式,它的主要目的是提供一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。这个模式允许我们遍历集合中的所有元素,而不必了解集合的具体实现。在Java、C#等...