欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

List 循环删除方法

程序员文章站 2022-05-09 18:35:22
...

 

 如果要循环删除List中的某些元素,例如删除值都是‘a’的元素,如果使用普通的for循环,很容易就会会漏删或者报错。

package com.pdnev;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

import org.junit.Before;
import org.junit.Test;


public class RemoveList {
	List<String> list;
	
	//准备数据
	@Before
	public void setData(){
		list = new ArrayList<String>();
		list.add("a");list.add("b");list.add("c");list.add("a");list.add("b");list.add("b");list.add("d");list.add("c");list.add("c");list.add("d");list.add("c");
	}
	
	//测试正确的方法
	@Test
	public void removeElement(){
		System.out.println("原始数据: "+ Arrays.asList(list));
		
		//从后向前删除
		for(int i = list.size()-1;i>=0;i--){
			if(list.get(i).equals("a"))	list.remove(i);
		}
		System.out.println("删除a后: "+ Arrays.asList(list));
		
		//Iterator 删除
		Iterator<String> it = list.iterator();
		while(it.hasNext()){
			String s = it.next();
			if(s.equals("b")) it.remove(); //不可以使用list.remove
			
		}
		System.out.println("删除b后: "+ Arrays.asList(list));
		
		//会漏掉的删除
		for(int i = 0;i<list.size();i++){
			if(list.get(i).equals("c"))  list.remove(i);
		}
		System.out.println("删除c后: "+ Arrays.asList(list));
		
		int size = list.size();
		for(int i = 0;i<size;i++){
			if(list.get(i).equals("d"))  list.remove(i);
		}
	}
}

 

执行结果:


List 循环删除方法
            
    
    博客分类: 零碎 list


List 循环删除方法
            
    
    博客分类: 零碎 list

可以看到,第一种使用从后向前删除是没有问题的。第二种使用Iterator 删除也是没问题的。

但是删除c 这一行的输出就有问题,仍然有c。 这是使用普通的for循环删除,会漏删,另外,如果size不是每次都去获取,会报越界异常。

 

如果使用 增强for的时候。会报ConcurrentModificationException异常

 

(因为对junit不熟悉,所以代码使用了junit练习下)

 

 

 

 

  • List 循环删除方法
            
    
    博客分类: 零碎 list
  • 大小: 2.9 KB
  • List 循环删除方法
            
    
    博客分类: 零碎 list
  • 大小: 6.5 KB
相关标签: list