List数组去除特定元素的方法

关于去除List数组中某个元素的方法有很多,其中以下这种方法对于新手来说很容易犯错:

public  void remove() {    
		ArrayList<String> list = new ArrayList<String>();   
		list.add("one");   
		list.add("two");   
		list.add("two");   
		list.add("two");   
		list.add("three");   
		int len = list.size();
		System.out.println("移除元素前:" + list);  
		 
		for(int i=0; i<list.size(); i++){
			if(list.get(i).equals("two")){
				list.remove(i);
			}
		}
		
		System.out.println("移除元素后:" + list);  
	  
	} 


通过以上的方法,可以看到结果并不是我们所想要的。那是因为 每次移除特定元素后,数组的大小会实时变化,而索引 i 却是不断的递增的 ,导致不匹配的结果。

下面介绍两种简单的实现方法:

1、通过迭代器iterator:

public  void remove() {    
		ArrayList<String> list = new ArrayList<String>();   
		list.add("one");   
		list.add("two");   
		list.add("two");   
		list.add("two");   
		list.add("three");   
		int len = list.size();
		System.out.println("移除元素前:" + list);  
		Iterator<String> iter = list.iterator();   
		while(iter.hasNext()){   
		    String s = iter.next();   
		    if(s.equals("two")){   
		        iter.remove();   
		    }   
		}   
		
		System.out.println("移除元素后:" + list);  
	  
	}
2、通过设置标志位,借助一个用来保存标志位的数组:

public  void remove() {    
		ArrayList<String> list = new ArrayList<String>();   
		list.add("one");   
		list.add("two");   
		list.add("two");   
		list.add("two");   
		list.add("three");   
		int len = list.size();
		int [] flag = new int[len];
		ArrayList<String> reserveList = new ArrayList<String>();   
		System.out.println("移除元素前:" + list);  		
		
		for(int i=0; i<list.size(); i++){
			flag[i] = 1; //默认是1,用于保留的索引位
			if(list.get(i).equals("two")){
				flag[i] = 0; //设置标志,将要删除的索引位
			}
		}
		for(int i=0; i<len; i++){
			if(flag[i] == 1){
				reserveList.add(list.get(i));
			}
		}
		
		System.out.println("移除元素后:" + reserveList);  
	  
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值