JAVAコレクションの要素を削除する方法
コレクションの一部の要素を削除することがよくあります.そう書くかもしれません.
この書き方は、実行すると次のような異常を報告します.
Exception in thread "main"java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)
リストはループ中は要素を削除できないからです.それから私はこのようにして、1種のとても愚かな方法で、構想はこのようにします:1つのリストを作成してわざわざ削除する要素を保存して、循環した後に、リストを使います.removeAllメソッドは要素を削除します.コードは次のとおりです.
これも確かに問題を解決することができますが、方法は本当に重くて、実はもっと簡単で効率的な方法があります.Iteratorを使うことです.removeメソッドは、次のとおりです.
だから、Javaの基礎知識を知れば知るほど、コードは簡潔になります.逆に、コードが特に複雑であれば、方法や設計に問題があります.
public void operate(List list){
for (Iterator it = list.iterator(); it.hasNext();) {
String str = (String)it.next();
if (str.equals("chengang")){
list.remove(str);
}
}
}
この書き方は、実行すると次のような異常を報告します.
Exception in thread "main"java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)
リストはループ中は要素を削除できないからです.それから私はこのようにして、1種のとても愚かな方法で、構想はこのようにします:1つのリストを作成してわざわざ削除する要素を保存して、循環した後に、リストを使います.removeAllメソッドは要素を削除します.コードは次のとおりです.
public void operate(List list){
List removeList= new ArrayList();
for (Iterator it = list.iterator(); it.hasNext();) {
String str = (String)it.next();
if (str.equals("chengang")){
removeList.add(str);
}
}
list.removeAll(removeList);
}
これも確かに問題を解決することができますが、方法は本当に重くて、実はもっと簡単で効率的な方法があります.Iteratorを使うことです.removeメソッドは、次のとおりです.
for (Iterator it = list.iterator(); it.hasNext();) {
String str = (String)it.next();
if (str.equals("chengang")){
it.remove();
}
}
だから、Javaの基礎知識を知れば知るほど、コードは簡潔になります.逆に、コードが特に複雑であれば、方法や設計に問題があります.