有關迭代器的併發修改異常

2022-04-06 05:53:37 字數 844 閱讀 2215

iterator迭代器:

listlist = new arraylist<>();

list.add("老馬");

list.add("老王");

list.add("老彭");

iteratoriterator = list.iterator();

while(iterator.hasnext())

}system.out.println(list);

通過list集合新增了元素,而迭代器獲取元素時預期的修改值次數和實際的修改值次數不相同造成的

(具體檢視arraylist類中iterator方法中匿名內部類itr()裡的**實現過程).

listiterator迭代器:

listiteratorlistiterator = list.listiterator();

while(listiterator.hasnext())

}system.out.println(list);

通過list集合新增了元素,而迭代器獲取元素時預期的修改值次數和實際的修改值次數不相同造成的

(具體是arraylist類中listiterator方法中匿名內部內listitr()繼承了他的父類itr()所以具體情況差不多大同小異)

如果想在listiterator迭代器中進行刪改還不產生併發異常,直接呼叫listiterator()本身的方法即可.

有關vector的迭代器失效問題

什麼是迭代器失效 在vector中因為插入 刪除的操作,導致vector的空間發生改變,讓其指向的那個位置的含義已經改變 可能原位置的空間已經被釋放,也可能原位置的資料變成其原來相鄰位置上的資料 從而導致iterator失效,因為每個容器的迭代器底層實現不同,所以導致它們失效的原因也不同,並不能因為...

C 中 有關迭代器失效的問題

對於順序容器,對其新增或者刪除元素,會有迭代器失效的情況。首先是erase,刪除的情況。假如刪除了,進行it 是肯定會報錯的 對於erase,會返回下乙個迭代器,避免失效。iter cont.erase iter 關聯容器,只需要 map iterator tmpiter iter iter dat...

陣列反轉 併發修改異常 有用

案例 反轉陣列元素.需求 1.定義int型別的陣列,儲存資料 11,33,22,55,44.2.反轉陣列,並列印反轉後的結果.public class demo05 2.反轉陣列.思路 第1次交換 11 和 44 第2次交換 33 和 55 解決方案 方案一 交換次數 陣列的長度 2 交換雙方 ar...