日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

為什么在foreach循環(huán)中JAVA集合不能添加或刪除元素

瀏覽:179日期:2022-08-10 17:45:49
目錄1. 編碼強制規(guī)約2. 原因分析3. 相關知識介紹3.1. 什么是快速失敗(fail-fast)?3.2. 什么是安全失敗(fail-safe)呢?1. 編碼強制規(guī)約

在《阿里巴巴Java開發(fā)手冊》中,針對集合操作,有一項規(guī)定,如下:

【強制】不要在 foreach 循環(huán)里進行元素的 remove/add 操作。remove 元素請使用 Iterator方式,如果并發(fā)操作,需要對 Iterator 對象加鎖。

public class SimpleTest { public static void main(String[] args) {List<String> list = Lists.newArrayList();list.add('1');list.add('2');list.add('3');list.add('4'); //正例Iterator<String> iterator = list.iterator();while (iterator.hasNext()) { String item = iterator.next(); if ('1'.equalsIgnoreCase(item)) {iterator.remove(); }} //反例for (String item : list) { if ('2'.equals(item)) {list.remove(item); }} }}2. 原因分析

在循環(huán)或迭代時,會首先創(chuàng)建一個迭代實例,這個迭代實例的expectedModCount 賦值為集合的modCount.

每當?shù)魇?#12132; hashNext() / next() 遍歷下⼀個元素之前,都會檢測 modCount 變量與expectedModCount 值是否相等,相等的話就返回遍歷;否則就拋出異常【ConcurrentModificationException】,終⽌遍歷

如果在循環(huán)中添加或刪除元素,是直接調用集合的add,remove方法【導致了modCount增加或減少】,但這些方法不會修改迭代實例中的expectedModCount,導致在迭代實例中expectedModCount 與 modCount的值不相等,拋出ConcurrentModificationException異常

但迭代器中的remove,add方法,會在調用集合的remove,add方法后,將expectedModCount 重新賦值為modCount,所以在迭代器中增加、刪除元素是可以正常運行的。

可以參考ArrayList中的內部私有類Itr、ListItr的源碼

public Iterator<E> iterator() {return new Itr(); } /** * An optimized version of AbstractList.Itr */ private class Itr implements Iterator<E> {int cursor; // index of next element to returnint lastRet = -1; // index of last element returned; -1 if no suchint expectedModCount = modCount; Itr() {} //刪除了一些代碼 public void remove() { if (lastRet < 0)throw new IllegalStateException(); checkForComodification(); try {ArrayList.this.remove(lastRet);cursor = lastRet;lastRet = -1;expectedModCount = modCount; } catch (IndexOutOfBoundsException ex) {throw new ConcurrentModificationException(); }} final void checkForComodification() { if (modCount != expectedModCount)throw new ConcurrentModificationException();} } public E remove(int index) {rangeCheck(index); modCount++;E oldValue = elementData(index); int numMoved = size - index - 1;if (numMoved > 0) System.arraycopy(elementData, index+1, elementData, index, numMoved);elementData[--size] = null; // clear to let GC do its work return oldValue; }3. 相關知識介紹3.1. 什么是快速失敗(fail-fast)?

快速失敗(fail-fast) 是 Java 集合的⼀種錯誤檢測機制。在使⽤迭代器對集合進⾏遍歷的時候,在多線程下操作⾮安全失敗(fail-safe)的集合類可能就會觸發(fā) fail-fast 機制,導致拋出ConcurrentModificationException 異常。

另外,在單線程下,如果在遍歷過程中對集合對象的內容進⾏了修改的話也會觸發(fā) fail-fast 機制。

舉個例⼦:多線程下,如果線程 1 正在對集合進⾏遍歷,此時線程 2 對集合進⾏修改(增加、刪除、修改),或者線程 1 在遍歷過程中對集合進⾏修改,都會導致線程 1 拋出ConcurrentModificationException 異常。

3.2. 什么是安全失敗(fail-safe)呢?

采⽤安全失敗機制的集合容器,在遍歷時不是直接在集合內容上訪問的,⽽是先復制原有集合內容,在拷⻉的集合上進⾏遍歷。所以,在遍歷過程中對原集合所作的修改并不能被迭代器檢測到,故不會拋ConcurrentModificationException 異常。

到此這篇關于為什么在foreach循環(huán)中JAVA集合不能添加或刪除元素的文章就介紹到這了,更多相關JAVA集合添加或刪除元素內容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品一区二区99| 日韩一区二区三区精品视频第3页| 亚洲欧洲美洲国产香蕉| 日韩二区在线观看| 麻豆久久一区| 正在播放日韩精品| 国产理论在线| 午夜影院欧美| 日韩和欧美一区二区| 国产精品qvod| 免费视频一区三区| 性欧美xxxx免费岛国不卡电影| 国产偷自视频区视频一区二区| 婷婷激情久久| 国产欧美一区二区色老头| 欧洲一级精品| 亚州精品视频| 中文字幕在线看片| 日韩中文字幕不卡| 久久精品国产亚洲一区二区三区| 激情五月综合网| 国产精品香蕉| 国产精品日本| 国产一区二区三区不卡视频网站 | 国产精品成人一区二区网站软件| 在线人成日本视频| 日本午夜精品| 国产一区视频在线观看免费| 久久激情av| 午夜在线视频一区二区区别| 精品午夜av| 视频一区日韩| 在线综合视频| 成人精品动漫一区二区三区| 日韩av在线播放中文字幕| 91精品久久久久久久久久不卡| 久久激情五月婷婷| 亚洲一区二区三区免费在线观看| 加勒比视频一区| 国产精品美女久久久| 国产一区二区精品福利地址| 欧美三区不卡| 日韩av电影一区| 免费美女久久99| 在线亚洲自拍| 野花国产精品入口| 黄色成人91| 石原莉奈在线亚洲三区| 国产精品99免费看| 亚洲女同av| 尹人成人综合网| 夜久久久久久| 日韩avvvv在线播放| 久久在线免费| 麻豆一区在线| 精品一区二区三区中文字幕在线| 国产精品网在线观看| 亚洲精品福利| 日韩高清一区在线| 国产精品久久| 国产成人黄色| 樱桃成人精品视频在线播放| 亚洲欧美视频| 日韩欧美激情电影| 国产精品啊v在线| 精品中文字幕一区二区三区 | 久久99蜜桃| 国产在线日韩精品| 欧美天堂视频| 亚洲美洲欧洲综合国产一区| 亚洲婷婷丁香| 国产精品调教视频| 久久九九电影| 91久久在线| 国产精品美女在线观看直播| 成人国产精品一区二区网站| 精品国模一区二区三区| 日产精品一区| 日韩激情网站| 欧美黑人巨大videos精品| 精品免费av在线| 亚洲精品成a人ⅴ香蕉片| 久久香蕉精品香蕉| 91精品福利| 美女在线视频一区| 亚洲激情中文在线| 九九久久国产| 婷婷亚洲成人| 亚洲精品a级片| 欧美黄色一区二区| 99tv成人| 精品国产精品国产偷麻豆| 蜜臀国产一区二区三区在线播放 | 欧美专区在线| 另类亚洲自拍| 欧美午夜不卡| 亚洲欧洲美洲国产香蕉| 正在播放日韩精品| 久久不见久久见中文字幕免费| 免费日韩一区二区| 香蕉久久99| 精品视频网站| 奇米色欧美一区二区三区| 最新日韩av| 亚洲精品一区二区在线看| 精品一区二区三区的国产在线观看| 久久精品在线| 国内揄拍国内精品久久| 国产精品夜夜夜| 国产亚洲字幕| 日韩三级一区| 日韩精品视频网| 日韩精品一卡二卡三卡四卡无卡| 国语精品一区| 日本不良网站在线观看| 激情综合网五月| 99视频精品全国免费| 欧美片网站免费| 在线亚洲国产精品网站| 91精品亚洲| 首页国产精品| 欧美在线看片| 日本美女一区| 樱桃视频成人在线观看| 久久99影视| 国产不卡精品在线| 高清日韩欧美| 成人在线超碰| 国产乱码午夜在线视频| 另类中文字幕国产精品| 日韩久久电影| 黄色亚洲大片免费在线观看| 伊人影院久久| 亚洲伊人影院| 欧美日韩亚洲国产精品| 国产精品美女午夜爽爽| 欧美精品国产一区| 精品香蕉视频| 在线日韩一区| 在线精品一区| 国产精品66| 1000部精品久久久久久久久| 中文欧美日韩| 91成人精品在线| 女生影院久久| 亚洲免费婷婷| 欧美极品一区二区三区| 免费不卡中文字幕在线| 亚洲免费一区三区| 福利在线一区| 99国产精品私拍| 欧美片网站免费| 日韩伦理在线一区| 亚洲天堂av资源在线观看| 久久超碰99| 国产一区白浆| 麻豆精品少妇| 国产欧美一区二区三区精品酒店| 亚洲天堂久久| 久久精品99国产国产精| 91精品亚洲| 国产精品xxx| 久久亚洲电影| 丰满少妇一区| 日韩午夜视频在线| 91精品在线观看国产| 亚洲精品成人一区| 国产精品网址| 黄色亚洲免费| 捆绑调教美女网站视频一区| 欧美1区2区3区| 国产人成精品一区二区三| 亚洲夜间福利| 久久99偷拍| 国产成人精品一区二区免费看京 | 欧美天堂视频| 精品国产麻豆| 你懂的网址国产 欧美| 日韩国产一二三区| 一区二区电影| 一区二区三区四区在线观看国产日韩| 日韩在线免费| 精精国产xxxx视频在线播放| 国产一区二区三区久久| 国产精品成人3p一区二区三区| 日韩精品成人| 国产欧美日韩精品一区二区三区| 亚洲深深色噜噜狠狠爱网站| 欧美特黄视频| 99在线|亚洲一区二区| 99久久九九| 红桃视频国产精品| 免费人成在线不卡| 亚州av一区| 国产色99精品9i| 国产日韩欧美| 精品在线网站观看| 欧美日韩水蜜桃| 巨乳诱惑日韩免费av| 水野朝阳av一区二区三区|