java中循环遍历删除集合list中的元素 java删除集合List中的元素

       java中循环遍历删除集合list中的元素 java删除集合List中的元素

 

一、问题描述

1、 假设有这么一个集合,代码如下:

List<java.sql.Connection> connList=new ArrayList<java.sql.Connection>(10);

2、需求: 将每一个 Connection 对象执行 .close(); 方法

3、思路:遍历集合中的每一个元素,获取 Connection 对象,执行close()方法,然后在集合中移除该元素。

 

二、 使用 for 循环 --- 示例代码

public static void  useFor() throws SQLException{
		List<java.sql.Connection> connList=new ArrayList<java.sql.Connection>(10);
		for (int index = 0; index < connList.size(); index++) {
			Connection connection = connList.get(index);
			connection.close();
			connList.remove(connection);
		}
	}

 

遇到问题不能遍历到全部元素,因为集合长度在一直减小,变量 index 一直增加。在示例代码中,当移除到第六个元素时,集合长度为5,index也5,for循环条件不满足,剩下的元素没有被遍历到!

 

三、使用foreach --- 示例代码

public static void useForeach() throws SQLException{
		List<java.sql.Connection> connList=new ArrayList<java.sql.Connection>(10);
		for (Connection connection : connList) {
			connection.close();
			connList.remove(connection);
		}
	}

 

遇到问题:抛出异常: java.util.ConcurrentModificationException 。foreach 在遍历的时候,不允许对集合增、删操作。 具体原因参考: https://blog.csdn.net/lipei1220/article/details/9028669

 

四、使用Iterator ---- 示例代码

public static void useIterator() throws SQLException{
	List<java.sql.Connection> connList=new ArrayList<java.sql.Connection>(10);
	Iterator<Connection> iterator = connList.iterator();
	while(iterator.hasNext()){
		Connection connection = iterator.next();
		connection.close();
		iterator.remove();
	}
}

 

遇到问题: 没有问题,完美解决。^_^、^_^^_^! ( 注意用 Iterator 对象的 remove()方法 !)

 

 

五、总结

1、使用for循环无法达到预期结果,且错误难以发现; foreach 会抛出异常

2、java中若需要对集合遍历进行删除操作,记得使用 Iterator 的 remove()方法!

 

 

PS:为了代码简洁,便于理解,示例代码中省略掉 connList 中添加 Connection 对象的步骤。

 

 

参考资料:https://www.cnblogs.com/aspirant/p/7900854.html

 

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页