FROM:http://www.cnblogs.com/alipayhutu/archive/2012/08/11/2634073.html
CopyOnWriteArrayList,因何而存在?
ArrayList的一個線程安全的變體,其所有可變操作( add 、 set 等)都是通過對底層數組進行一次新的復制來實現的,代價昂貴。
?
CopyOnWriteArrayList,是因”并發”而生。
?
?
CopyOnWriteArrayList,改了其中的某對象的某個值,
?
【場景一】對于ArrayList,使用直接方式,一邊遍歷,一邊刪除,會報錯。
<!--CRLF-->// 刪除/修改元素
<!--CRLF-->for (String item : list){
<!--CRLF-->list.remove(item);
<!--CRLF-->}
<!--CRLF-->
?
?
?
?
解決辦法一:使用迭代器,一邊遍歷,一邊刪除,不會報錯。
// 刪除/修改元素
Iterator<String> it = list.iterator();
while(it.hasNext()){
??? String ele = it.next();
??? it.remove();
}
http://blog.sina.com.cn/s/blog_605f5b4f0100qsgf.html
?
?
解決辦法二:
使用CopyOnWriteArrayList,直接方式,一邊遍歷,一會刪除,不會報錯。
for(String item : list){
??? list.remove(item);
}
?
?
【場景二】對于ArrayList,使用迭代器,一邊遍歷,一邊add,會報錯。
Iterator<String> it = list.iterator();
while(it.hasNext()){
??? String str = it.next();
??? String tem = str + "...";
??? list.add(tem);
}
?
解決辦法一:
改用CopyOnWriteArrayList,直接方式,一邊遍歷,一邊add,不會報錯。
for(String item : list){
??? String tem = item + "...";
??? list.add(tem);
}
?
解決辦法二:
改用CopyOnWriteArrayList,一邊遍歷,一邊add,不會報錯。
??????? Iterator<String> it = list.iterator();
??????? while(it.hasNext()){
??????????? String str = it.next();
??????????? String tem = str + "...";
??????????? list.add(tem);
??????? }
?
【場景三】對于CopyOnWriteArrayList,迭代器,不能remove。
Iterator<String> it = list.iterator();
while(it.hasNext()){
??? String str = it.next();
??? String tem = str + "...";
??? it.remove();
}
?
解決辦法一:使用直接方式,一邊遍歷,一邊add/remove()
for(String item : list){
??? String tem = item + "...";
??? list.remove(item);
??? list.add(tem);
}
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
