zoukankan      html  css  js  c++  java
  • List 集合remove问题

    java的list集合中。使用remove删除元素:

    方法一:

    static List<Integer> list3 = new ArrayList<Integer>();
    static {
    	list3.add(1);
    	list3.add(2);
    	list3.add(2);
    	list3.add(2);
    	list3.add(2);
    }
    private static void remove(List<Integer> list3) {
    	for (int i=0;i<list3.size();i++) {
    		if(list3.get(i) == 2) {
    			list3.remove(i);
    		}
    	}
    	print(list3);
    }
    

    打印结果:1。2。2

    造成问题的解决办法是,在使用remove删除list中元素时,list集合的size会发生变化。所以不能达到预期。


    方法二:

    private static void remove(List<Integer> list3) {
    	for(int i = 0 , len= list3.size();i<len;++i){  
    		  if(list3.get(i)==2){  
    			  list3.remove(i);  
    			   --len;//降低一个  
    			   --i;//多谢deny_guoshou指正,假设不加会出现评论1楼所说的情况。  
    		 }  
    	} 
    	print(list3);
    }

    打印结果:1

    因为动态的计算list大小,所以能够得到正确答案


    方法三:

    Iterator<String> sListIterator = list.iterator();  
    while(sListIterator.hasNext()){  
        String e = sListIterator.next();  
        if(e.equals("3")){  
        sListIterator.remove();  
        }  
    }
    List接口内部实现了Iterator接口。提供开发人员一个iterator()得到当前list对象的一个iterator对象。

    注:对于并发情况,更因该使用第三种方法(迭代器)。否则一定会出现并发问题。




  • 相关阅读:
    Jzoj5542 董先生的钦点
    Jzoj5542 董先生的钦点
    (各种)FFT模板
    (各种)FFT模板
    Jzoj3528 图书馆
    Jzoj3528 图书馆
    Jzoj5317 Func
    Jzoj5317 Func
    Jzoj3591 数据
    【UVa11021】Tribles
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6699158.html
Copyright © 2011-2022 走看看