学习小记 JAVA第一节
以前总感觉自己记性好,学过的东西都可以记在脑子里,现在发现确实也需要一些实质化的东西来记录自己所学,开这么一个专题吧,记录自己后端、前端各种学习到的东西
java的list如何在循环中删除数据
- 问题原因
list使用数组实现,在循环中如果按照下标删除数据,后面的数据会补在被删除的元素的位置,后续删除的元素下标会不正确。
使用foreach循环,参照资料:
ArrayList的父类AbstarctList中有一个域modCount,每次对集合进行修改(增添、删除元素)时modCount都会+1
注意:倒序循环也是可行的,每次删除之后list的长度-1,元素前移不会影响后续的删除
- Java8 Stream
这是我最喜欢的一种方式
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add(i);
}
list = list.stream().filter(item -> item%3 != 0).collect(Collectors.toList());
复制代码
3.迭代器Iterator删除 (多线程要加锁,这也是阿里巴巴推荐的方式)
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
Integer next = iterator.next();
if (next%3 == 0) {
iterator.remove();
}
}
复制代码
4.倒序循环删除
for (int i = list.size() - 1; i > 0; i--) {
if (list.get(i)%3 == 0) {
list.remove(i);
}
}
复制代码
三种都删除了对3取余为0的项,建议使用stream流的方式进行处理
加油!加油!加油!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END