在for循环中使用java.util.List的remove方法注意事项

        在实际开发中有时候会碰到这样的场景,需要将一个list集合中的某些特定的元素给删除掉,这个时候用可以用List提供的remove方法来实现需求。

        List中的remove方法传入的参数可以是集合的下标,也可以是集合中一个元素。当一次只需要删除List集合中的单个元素时,只需注意传入的参数为下标或者元素对象即可。但是当在循环中(比如for循环)使用remove方法时,注意要从List集合的最后一个元素开始遍历。首先List集合的一个特点是它其中的元素时有序的,也就是说元素的下标是根据插入的顺序来的,在删除头部或者中间的一个元素后,后面的元素下标会往前移动,如下代码。

public static void main(String[] args) {
		new Test02().runPositive();
		new Test02().runReverse();
	}
	
	/**
	 *  顺序遍历集合,并remove下标为偶数的元素
	 *  输出结果 b c e f
	 */
	public void runPositive() {
		List<String> strList = new ArrayList<>();
		strList.add("a");
		strList.add("b");
		strList.add("c");
		strList.add("d");
		strList.add("e");
		strList.add("f");
		for(int i = 0; i < strList.size(); i++) {
			if (i % 2 == 0) {
				strList.remove(i);
			}
		}
		for(String str : strList) {
			System.out.print(str + " ");
		}
		System.out.println();
	}
	
	/**
	 * 逆序遍历集合,并remove下标为偶数的元素
	 * 输出结果 b d f
	 */
	public void runReverse() {
		List<String> strList = new ArrayList<>();
		strList.add("a");
		strList.add("b");
		strList.add("c");
		strList.add("d");
		strList.add("e");
		strList.add("f");
		for(int i = strList.size() - 1; i >= 0; i--) {
			if (i % 2 == 0) {
				strList.remove(i);
			}
		}
		for(String str : strList) {
			System.out.print(str + " ");
		}
		System.out.println();
	}

       在这段代码中,除了main方法外,两个方法都是去遍历一个List集合,并删除下标为偶数的元素。但是结果很显然,采用从下标0开始遍历,得到的结果是不正确的,这自然是因为当删除一个元素后,后面的元素会占用前面被删除元素的位置。

       总之,使用循环的方式遍历删除List集合中的元素,需要从集合中的最后一个元素开始遍历,这样才能得到预期的结果。

发布了48 篇原创文章 · 获赞 52 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/y506798278/article/details/90760735