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遍历修改及删除数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
MyEclipse整合ssh三大框架环境搭载用户注册源码下载
这篇文章主要为大家详细介绍了如何使用MyEclipse整合ssh三大框架进行环境搭载,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2016-10-10java实现基于UDP协议网络Socket编程(C/S通信)
这篇文章主要介绍了java实现基于UDP协议网络Socket编程(C/S通信),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-10-10@SpringBootConfiguration重复加载报错问题解决
@SpringBootApplication 注解的 exclude 属性用于排除特定的自动配置类,而不是用于排除主配置类本身,因此,不能通过 exclude 属性来排除主配置类的加载,这篇文章主要介绍了@SpringBootConfiguration重复加载报错,需要的朋友可以参考下2024-08-08
最新评论