案例: 反轉陣列元素.
需求: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 是因為經過 將陣列的...