2

リンクされたハッシュセットから要素を削除するさまざまな方法を知りたいです。次のコードを試しました

LinkedHashSet<String> lhs = new LinkedHashSet<String>();
for(int i=0;i<10;i++)
  lhs.add(String.valueOf(i));
Iterator<String>  it=lhs.iterator();
System.out.println("removed?=="+lhs.remove("1"));
while(it.hasNext()) 
{
    System.out.println("lhs"+it.next());
}

私は次の出力を得ました

removed?==true
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(Unknown Source)
at java.util.LinkedHashMap$KeyIterator.next(Unknown Source)
at preac.chapter1.Start.main(Start.java:321)

何が恋しい?前もって感謝します。

PS iterator.remove() メソッドも試しましたが、 Illegal State Exception が発生しました

編集

イテレータ削除メソッドを使用する必要があることを知りました。では、Link Hash Set remove メソッドの使用とは何ですか? どのような場合にこの方法を使用する必要がありますか?

4

2 に答える 2

7

Iterator.remove以下のように要素を削除してみてください。

LinkedHashSet<String> lhs = new LinkedHashSet<String>();
for (int i = 0; i < 10; i++) {
   lhs.add(String.valueOf(i));
}  

Iterator<String>  it=lhs.iterator();
  //  System.out.println("removed?=="+lhs.remove("1"));
 while(it.hasNext()) {
   String value=it.next();
   if("1".equals(value)){
      it.remove();
   }
   else{
      System.out.println("lhs  "+value);// Print the other value except 1
    }
 }
System.out.println(lhs);// After remove see the result here.
于 2013-11-22T12:14:40.140 に答える