【集合】循環中如何刪除其中的元素


1. 使用for each 語句進行刪除

 

public class ConcurrentModificationException
extends RuntimeException

當方法檢測到對象的並發修改,但不允許這種修改時,拋出此異常。
例如,某個線程在 Collection 上進行迭代時,通常不允許另一個線性修改該 Collection。通常在這些情況下,迭代的結果是不確定的。如果檢測到這種行為,一些迭代器實現(包括 JRE 提供的所有通用 collection 實現)可能選擇拋出此異常。執行該操作的迭代器稱為快速失敗 迭代器,因為迭代器很快就完全失敗,而不會冒着在將來某個時間任意發生不確定行為的風險。

 

2. 傳統的for循環進行刪除


Debug跟蹤后發現,原來,集合刪除元素時,集合的size會變小,連帶索引都會改變!

 

解決方法:

1. 用傳統for循環,從集合最后元素向前循環刪除元素,集合的size會變小,連帶索引都會改變,但不會影響到前面的未循環元素。

for(int s=a.size()-1;s>=0;s--){
if(a.get(s).intValue()==333){
a.remove(s);
}
}

2. 使用Iterator的remove()方法刪除集合中的元素

 

List<SharedBoardSmsWrapper> source;

Iterator<SharedBoardSmsWrapper> sourceIt=source.iterator();

ConcurrentHashMap<String, String> smsMap;

Iterator<Entry<String, String>> iterator = smsMap.entrySet() .iterator();

while (iterator.hasNext()) {
           
                    if () {
                      
                    } else {
                        iterator.remove();
                    }
                }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM