雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

List remove注意点

Posted on 2016-07-28 21:13  huhuuu  阅读(199)  评论(0编辑  收藏  举报
public class ListTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        List<String> ll = new ArrayList<String>();
        ll.add("1");
        ll.add("2");
        ll.add("3");
        
        for(String str : ll ){
            if(str.endsWith("2")){
                ll.remove(str);
            }
        }
        
    }

}


public class ListTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        List<String> ll = new ArrayList<String>();
        ll.add("1");
        ll.add("2");
        ll.add("3");
        
        for(String str : ll ){
            if(str.endsWith("3")){
                ll.remove(str);
            }
        }
        
    }

}

 

 

public class ListTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        List<String> ll = new ArrayList<String>();
        ll.add("1");
        ll.add("2");
        ll.add("3");

        
        for (Iterator it = ll.iterator(); it.hasNext();) {
            String str = (String)it.next();
            if(str.equals("3")){
                it.remove();
                System.out.println(it);
            }else{
                System.out.println(it);
            }
        }

        System.out.println("end");
    }

}

 

用迭代器就不会有问题:

原因:for是通过指针去判断,如果最后的元素删掉了,那么久没办法判断是否是list结束点了

迭代器的的hasNext()是通过数值判断

public boolean hasNext() {  
           return cursor != size();  
}  
  
public E next() {  
           checkForComodification();  
    try {  
    E next = get(cursor);  
    lastRet = cursor++;  
    return next;  
    } catch (IndexOutOfBoundsException e) {  
    checkForComodification();  
    throw new NoSuchElementException();  
    }  
}