在遍歷java集合時不能進行增加和刪除操作(附上集合操作的注意事項)
阿新 • • 發佈:2019-02-18
在使用List集合(或者其他普通的集合)進行迭代(或者普通的for迴圈時),並不能進行增加和刪除操作。
要解決這個問題可以從內部程式碼找到原因:
這是因為在程式碼中,hasNext()判斷的條件是:cursor!=size,而size是動態變化的。如果原來size是2,初始cursor是0,刪去了第一個元素後,size就是1,而cursor在訪問下一個元素時,cursor+1,為1,故這樣就跳過了原來的第二個元素。
下面劃重點,如果要在遍歷java集合的時候進行這些操作怎麼辦:
1.可以使用iterator自帶的remove()方法。
2.如果是在多執行緒的環境下,可以使用concurrentHashMap來代替hashMap,用
CopyOnWriteArrayList來代替list。這些均是執行緒安全的java集合。
另外,附上集合的一些使用注意點:
一個例項的迭代器僅僅能使用一次。即
Iterator<user> userIterator = userList.iterator();
userIterator.next()只能在一個地方使用。因為被迭代完畢後,這裡面就沒有東西可以迭代了。
如果還需要使用迭代器獲得內容,只能重新再獲得一個了。Iterator<user> userIterator = userList.iterator();