java.util.List的remove()方法使用技巧

一.list.remove(i)

public static void main(String[] args) {
    List<Integer> list = new ArrayList<Integer>();
    list.add(1);
    list.add(2);
    list.add(3);
    list.add(3);
    list.add(4);
         
    for (int i=0; i<list.size(); i++) {
        if (list.get(i) == 3) {
            list.remove(i);//這樣寫不對,須要寫成list.remove(i--) 
        }
    }
         
    System.out.println(list);
}

若是要遍歷list進行過濾,好比過濾掉值爲3的對象。本覺得這代碼再簡單不過,可仍是掉坑裏了,上面的代碼這樣寫的話,元素3是過濾不完的。只要list中有相鄰2個相同的就過濾不完List調用remove(index)方法後,會移除index位置上的元素,index以後的元素就所有依次左移,即索引依次-1要保證能操做全部的數據,須要把index-1,不然原來索引爲index+1的元素就沒法遍歷到(由於原來索引爲index+1的數據,在執行移除操做後,索引變成index了,若是沒有index-1的操做,就不會遍歷到該元素,而是遍歷該元素的下一個元素)。java

一樣,Map經過keySet()或entrySet()遍歷時,不能刪除裏面的元素,不然會報java.util.ConcurrentModificationException
spa

爲了不出現以上狀況,須要對List或Map進行遍歷且要進行刪除操做時必定要使用迭代器Iterator,經過iterator.remove()來刪除。code

二.建議使用iterator.remove方法

if (null != list && list.size() > 0) {
    Iterator it = list.iterator();  
    while(it.hasNext()){
        Student stu = (Student)it.next(); 
        if (stu.getStudentId() == studentId) {
            it.remove(); //移除該對象
        }
    }
}
相關文章
相關標籤/搜索