在Java中,如果你需要一边遍历一边修改数据或删除数据,有几种常见的方法可以实现。关键点是要避免在遍历时直接修改或删除集合中的元素,因为这可能导致ConcurrentModificationException异常。以下是一些安全的方式: 1
在Java中,如果你需要一边遍历一边修改数据或删除数据,有几种常见的方法可以实现。关键点是要避免在遍历时直接修改或删除集合中的元素,因为这可能导致ConcurrentModificationException异常。以下是一些安全的方式:
使用Iterator遍历并修改/删除元素: 使用Iterator是安全的一种方式,因为它提供了遍历过程中进行修改和删除操作的方法,而且不会导致ConcurrentModificationException异常。
List numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));Iterator iterator = numbers.iterator();while (iterator.hasNext()) { Integer number = iterator.next(); // 修改数据 // 对于修改操作,你可以通过直接修改iterator返回的元素来修改原集合中的数据 iterator.set(number * 2); // 删除数据 if (number % 2 == 0) { iterator.remove(); }}System.out.println(numbers); // 输出: [2, 6, 10]
使用ListIterator遍历并修改/删除元素: ListIterator是Iterator的子类,除了支持向前和向后遍历外,还支持在遍历时添加、修改和删除元素。
List numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));ListIterator listIterator = numbers.listIterator();while (listIterator.hasNext()) { Integer number = listIterator.next(); // 修改数据 listIterator.set(number * 2); // 删除数据 if (number % 2 == 0) { listIterator.remove(); }}System.out.println(numbers); // 输出: [2, 6, 10]
使用一个临时列表进行修改或删除: 遍历集合时,可以使用一个临时的列表来保存需要修改或删除的元素,遍历完成后再进行实际的修改和删除操作。
List numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));List elementsToRemove = new ArrayList<>();for (Integer number : numbers) { // 修改数据 // 假设我们要将所有的奇数变成原来的两倍 if (number % 2 != 0) { int newNumber = number * 2; elementsToRemove.add(number); numbers.add(newNumber); } // 删除数据 if (number % 3 == 0) { elementsToRemove.add(number); }}numbers.removeAll(elementsToRemove);System.out.println(numbers); // 输出: [2, 4, 8, 10]
请注意,上述方法中的第三种可能会在较大的数据集上导致性能问题,因为它涉及复制和删除元素,所以最好在数据集较小时使用。如果可能,推荐使用第一种或第二种方法,它们在遍历时直接修改或删除元素,并且更高效。
来源地址:https://blog.csdn.net/qq_63815371/article/details/131839417
--结束END--
本文标题: java 遍历途中修改数据以及删除数据
本文链接: https://lsjlt.com/news/408581.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-01
2024-04-03
2024-04-03
2024-01-21
2024-01-21
2024-01-21
2024-01-21
2023-12-23
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0