零全零美(www.zzgwt.com)
          生活中的很多事情,并不像If...Else那么簡單!
          posts - 96,comments - 52,trackbacks - 0

          當使用 fail-fast iterator 對 Collection 或 Map 進行迭代操作過程中嘗試直接修改 Collection / Map 的內容時,即使是在單線程下運行, java.util.ConcurrentModificationException 異常也將被拋出。

            Iterator 是工作在一個獨立的線程中,并且擁有一個 mutex 鎖。 Iterator 被創建之后會建立一個指向原來對象的單鏈索引表,當原來的對象數量發生變化時,這個索引表的內容不會同步改變,所以當索引指針往后移動的時候就找不到要迭代的對象,所以按照 fail-fast 原則 Iterator 會馬上拋出 java.util.ConcurrentModificationException 異常。

            所以 Iterator 在工作的時候是不允許被迭代的對象被改變的。但你可以使用 Iterator 本身的方法 remove() 來刪除對象, Iterator.remove() 方法會在刪除當前迭代對象的同時維護索引的一致性。

            有意思的是如果你的 Collection / Map 對象實際只有一個元素的時候, ConcurrentModificationException 異常并不會被拋出。這也就是為什么在 javadoc 里面指出: it would be wrong to write a program that depended on this exception for its correctness: ConcurrentModificationException should be used only to detect bugs.

          使用LinkedIterator解決,LinkedIterator有add方法,可以向迭代對象中添加數據

          在使用Foreach迭代時,如果使用如果刪除元素,也會發生異常,

          posted on 2008-04-18 00:33 零全零美 閱讀(196) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 湄潭县| 乐昌市| 株洲市| 江孜县| 桓仁| 定边县| 泉州市| 桐梓县| 福泉市| 宜良县| 仪征市| 焦作市| 河池市| 盐源县| 扶风县| 西吉县| 阿图什市| 土默特左旗| 秦安县| 保山市| 遵义县| 万载县| 惠安县| 海淀区| 乐亭县| 汉寿县| 滦南县| 武陟县| 英超| 武冈市| 应用必备| 莱州市| 南投市| 宜兴市| 青神县| 疏勒县| 宁安市| 泉州市| 临邑县| 广水市| 汶川县|