JAvaでのループ削除コレクションリストの要素java削除コレクションリストの要素

2206 ワード

JAvaでのループ削除コレクションリストの要素java削除コレクションリストの要素
 
一、問題の説明
1、このような集合があると仮定し、コードは以下の通りである.
List connList=new ArrayList(10);

2、需要:各接続オブジェクトを.close()を実行する;方法
3、考え方:コレクション内の各要素を遍歴し、Connectionオブジェクトを取得し、close()メソッドを実行し、コレクションから要素を削除します.
 
二、forループの使用---サンプルコード
public static void  useFor() throws SQLException{
		List connList=new ArrayList(10);
		for (int index = 0; index < connList.size(); index++) {
			Connection connection = connList.get(index);
			connection.close();
			connList.remove(connection);
		}
	}

 
問題:コレクションの長さが減少し、変数indexが増加しているため、すべての要素に遍歴することはできません.サンプルコードでは、6番目の要素に削除すると、セット長は5で、indexも5で、forサイクル条件が満たされず、残りの要素は遍歴されません!
 
三、foreach---サンプルコードの使用
public static void useForeach() throws SQLException{
		List connList=new ArrayList(10);
		for (Connection connection : connList) {
			connection.close();
			connList.remove(connection);
		}
	}

 
問題:例外の放出:java.util.C o n c u r r r e ntModificationException.foreachは遍歴時に集合の追加,削除操作を許さない.具体的な原因:https://blog.csdn.net/lipei1220/article/details/9028669
 
四、Iterator----サンプルコードの使用
public static void useIterator() throws SQLException{
	List connList=new ArrayList(10);
	Iterator 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