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

2022-06-20 02:27:12 字數 1604 閱讀 3842

案例: 反轉陣列元素.

需求:1.定義int型別的陣列, 儲存資料: 11, 33, 22, 55, 44.

2.反轉陣列, 並列印反轉後的結果.

*/public class demo05 ;

//2. 反轉陣列.

/*思路:

第1次交換: 11 和 44

第2次交換: 33 和 55

解決方案:

方案一:

交換次數: 陣列的長度 / 2

交換雙方:

arr[0] 和 arr[arr.length - 1 - 0]

arr[1] 和 arr[arr.length - 1 - 1]

arr[2] 和 arr[arr.length - 1 - 2]

arr[3] 和 arr[arr.length - 1 - 3]

......

arr[i] 和 arr[arr.length - 1 - i]

方案二:

1. 用start表示起始索引, 用end表示結束索引, 即: arr[start] 和 arr[end]交換

2. 如果start < end, 就一直交換.

*///方案一

/*for (int i = 0; i <arr.length / 2; i++) */

//方案二:

for (int start = 0, end =arr.length - 1; start < end; start++, end--)

//3. 列印結果.

for (int i = 0; i < arr.length; i++)

併發修改異常簡介:

概述:當使用普通迭代器(iterator)遍歷集合的同時, 又往集合中新增了元素, 就會報 concurrentmodificationexception(併發修改異常).

產生原因:

大白話:

普通迭代器(iterator), 遍歷集合, 又往集合中新增元素, 這只是併發修改異常出現的其中一種情況, 其它情況後續做專案你也會遇到.

不管什麼原因出現的併發修改異常, 解決方案都是一樣的.

專業版:

在arraylist集合類的內部類 itr類中, 有乙個next()方法, 該方法是重寫了 iterator介面的next()方法,

該方法內部有乙個int型別的變數, 記錄的就是獲取迭代器的時候, 集合中的元素個數, 如果當集合中實際元素

的個數大於這個值的時候, 就會報: 併發修改異常.

解決方案:

1. 通過列表迭代器解決, 注意: 新增元素的時候, 要使用 列表迭代器獨有的 add()方法新增元素.

這種方式新增的元素, 是在當前元素的後邊新增的.

2. 通過普通 for 迴圈實現.

這種方式新增的元素, 是在集合的末尾新增的.

3. 通過copyonwritearraylist集合實現.

這種方式新增的元素, 是在集合的末尾新增的.

List集合遍歷時修改元素出現併發修改異常總結

當我們在遍歷實現了collection介面與iterator介面的集合時 list set map 我們可以通過遍歷索引也可以通過迭代器進行遍歷。在我們使用迭代器進行遍歷集合的時候,會獲取到當前集合的迭代物件。在裡面有封裝了迭代器的remove方法與集合自帶的remove方法,如果我們呼叫迭代器物件...

不修改原陣列的情況下反轉陣列

問題 在不修改原陣列的情況下反轉陣列 大家都知道reverse 但是這個方法是會改變原來的陣列,怎樣既可以訪問到原來的陣列,有可以讓新陣列實現元素反轉。首先,複習一下在陣列的方法中,哪些是修改原有的陣列,哪些是生成新的陣列。es6新增的擴充套件運算子非常好用。arr 就是複製陣列 let testa...

陣列 陣列反轉,排序

using system using system.collections.generic using system.linq using system.text namespace 資料反轉 string s for int i 0 i strallay.length 2 i 是因為經過 將陣列的...