我是
靠谱客的博主
称心水池,最近开发中收集的这篇文章主要介绍
CopyOnWriteArrayList,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
CopyOnWriteArrayList是ArrayList的一个线程安全的变体,即可在并发中使用。而它的可变操作都是通过对ArrayList中存储的数组通过一次新的复制来实现的。
首先讲一下它的用处,如下面的代码:
List<String> list =newArrayList<String>();
list.add("4");
list.add("5");
list.add("6");
Iterator<String>iter = list.iterator();
while(iter.hasNext()){
String o =iter.next();
System.out.println(o);
list.remove(o);//orlist.add("adf");等操作
}
执行会跑出异常:java.util.ConcurrentModificationException
当然如果吧 list.remove(o);换成iter.remove();是没问题的!但是iter却没有add方法。
下面说一下如何使用CopyOnWriteArrayList在遍历集合过程中修改元素。代码如下
List<String> list =newCopyOnWriteArrayList<String>();
list.add("4");
list.add("5");
list.add("6");
Iterator<String>iter = list.iterator();
while(iter.hasNext()){
String o =iter.next();
System.out.println(o);
list.remove(o);//orlist.add("adf");等操作
}
注:1.上面已经说过,CopyOnWriteArrayList操作是很消耗资源的,使用条件是,当集合中需要修改的元素数远小于集合大小时。
2.因为CopyOnWriteArrayList在做迭代之前是做了一份“快照”,所以此时的iter是不可变的,也就是说如果在此遍历中调用iter.remove();会抛出异常:java.lang.UnsupportedOperationException。
最后
以上就是称心水池为你收集整理的CopyOnWriteArrayList的全部内容,希望文章能够帮你解决CopyOnWriteArrayList所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复