java遍历途中修改数据及删除数据的方法总结
作者:book多得
在使用java的集合类遍历数据的时候,在某些情况下可能需要对某些数据进行删除,下面这篇文章主要给大家介绍了关于java遍历途中修改数据及删除数据的方法总结,需要的朋友可以参考下
前言
在Java中,如果你需要一边遍历一边修改数据或删除数据,有几种常见的方法可以实现。关键点是要避免在遍历时直接修改或删除集合中的元素,因为这可能导致ConcurrentModificationException异常。以下是一些安全的方式:
1、Iterator遍历
使用Iterator遍历并修改/删除元素: 使用Iterator是安全的一种方式,因为它提供了遍历过程中进行修改和删除操作的方法,而且不会导致ConcurrentModificationException异常。
List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5)); Iterator<Integer> 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]
2、ListIterator遍历
使用ListIterator遍历并修改/删除元素: ListIterator是Iterator的子类,除了支持向前和向后遍历外,还支持在遍历时添加、修改和删除元素。
List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5)); ListIterator<Integer> 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]
3、临时列表
使用一个临时列表进行修改或删除: 遍历集合时,可以使用一个临时的列表来保存需要修改或删除的元素,遍历完成后再进行实际的修改和删除操作。
List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5)); List<Integer> 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]
请注意,上述方法中的第三种可能会在较大的数据集上导致性能问题,因为它涉及复制和删除元素,所以最好在数据集较小时使用。如果可能,推荐使用第一种或第二种方法,它们在遍历时直接修改或删除元素,并且更高效。
总结
到此这篇关于java遍历途中修改数据及删除数据的文章就介绍到这了,更多相关java遍历修改及删除数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!