List中循环删除元素

在Java中,因为List接口有remove()这个方法,我们只需要调用remove()方法,就可以删除List中的某个元素。
但是在for循环中用remove()就不太行了
根据面向百度开发的经验,总结了四种List循环删除元素的方法

1.使用迭代器删除(推荐)

	//使用迭代器删除元素
	List<String> list = new ArrayList<>();
	list.add("1");
	list.add("2");
	list.add("3");
	list.add("4");
	list.add("5");
	Iterator<String> iterator = list.iterator();
	while (iterator.hasNext()){
		String str = iterator.next();
		if(str.equals("2")){
			iterator.remove();
		}
	}
	System.out.println(list);

iterator.remove() 方法会在删除当前迭代对象的同时,会保留原来元素的索引,用迭代删除元素是最保险的方法。

2.删除元素后i-1

	//使用for循环删除元素
	List<String> list = new ArrayList<>();
	list.add("1");
	list.add("2");
	list.add("3");
	list.add("4");
	list.add("5");
	for (int i = 0; i < list.size(); i++) {
		String str = list.get(i);
		if(str.equals("2")){
			list.remove(i);
			i--;
		}
	}
	System.out.println(list);

删除一个元素后,后边的元素前移1位,i-1,下次循环能访问到前移1位的元素

3.反向删除

	//反向循环删除元素
	List<String> list = new ArrayList<>();
	list.add("1");
	list.add("2");
	list.add("3");
	list.add("4");
	list.add("5");
	for (int i = list.size() - 1; i >= 0 ; i--) {
		String str = list.get(i);
			if(str.equals("1")){
				list.remove(i);
			}
		}
	System.out.println(list);

这样,就算删除了倒数第一个元素,List重排,也只是把后边的元素左移1位,此时倒数第一个元素(下标为1)被删除,接着2替代了1成为了下标为1的元素,但前边的元素不变,i = 0 后依然能够找到其相邻的元素

4.赋值给新的List

	//赋值给新的List
	List<String> list = new ArrayList<>();
	list.add("1");
	list.add("2");
	list.add("3");
	list.add("4");
	list.add("5");
	List<String> list2 = new ArrayList<>();
	for (int i = list.size() - 1; i >= 0 ; i--) {
		String str = list.get(i);
		if(!str.equals("2")){
			list2.add(str);
		}
	}
	System.out.println(list);
	System.out.println("新的List"+list2);

可以过滤掉不需要的元素后赋值给新的list对象

你可能感兴趣的:(JAVA,Java,List)