我是靠谱客的博主 美好胡萝卜,这篇文章主要介绍删除ArrayList元素的4种正确方法删除ArrayList元素的4种正确方法,现在分享给大家,希望可以做个参考。

删除ArrayList元素的4种正确方法

1.倒序删

倒序删不会出现像正序删那样因为删完元素后剩余的元素索引发生改变而遗漏元素并且最终会报 java.lang.IndexOutOfBoundsException 异常的情况。

复制代码
1
2
3
4
5
6
7
8
public static void remove(List<String> list, String target) { for(int i = list.size() - 1; i >= 0; i--){ String item = list.get(i); if(target.equals(item)){ list.remove(item); } } }

2.CopyOnWriteArrayList线程安全删除

利用 CopyOnWrite 容器。CopyOnWrite 容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行 Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对 CopyOnWrite 容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以 CopyOnWrite 容器也是一种读写分离的思想,读和写不同的容器。

复制代码
1
2
3
4
5
6
7
8
public static void remove(ArrayList<String> list, String target) { final CopyOnWriteArrayList<String> cowList = new CopyOnWriteArrayList<String>(list); for (String item : cowList) { if (item.equals(target)) { cowList.remove(item); } } }

3.迭代器remove方法删除(推荐)

对于别的 List 实现类来说,要用此法删除元素的前提是该 List 的实现类的 iterator() 方法返回的 Iterator 实现类支持 remove() 方法,否则会报 java.lang.UnsupportedOperationException 异常,常用的 ArrayList 的 Iterator 支持 remove() 方法。

复制代码
1
2
3
4
5
6
7
8
9
public static void remove(List<String> list, String target) { Iterator<String> iter = list.iterator(); while (iter.hasNext()) { String item = iter.next(); if (item.equals(target)) { iter.remove(); } } }

4.增强for循环中删除

增强 for 循环中删除元素后继续循环会报 java.util.ConcurrentModificationException 异常,因为元素在使用的时候发生了并发的修改,导致异常抛出,但是删除完毕马上使用 break 跳出,则不会触发报错。

复制代码
1
2
3
4
5
6
7
8
public static void remove(List<String> list, String target) { for (String item : list) { if (item.equals(target)) { list.remove(item); break; } } }

最后

以上就是美好胡萝卜最近收集整理的关于删除ArrayList元素的4种正确方法删除ArrayList元素的4种正确方法的全部内容,更多相关删除ArrayList元素内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(83)

评论列表共有 0 条评论

立即
投稿
返回
顶部