• 締切済み

ArrayListのイテレータについて

java初心者です. 以下のようなプログラム(かなり簡略化しています)で ArrayList<Integer> list =new ArrayList<Integer>(); list.add(new Integer(1)); Iterator it = list.iterator(); while(it.hasNext()){ it.next() if(Math.random()<0.5) list.add(new Integer(2));//50%の確率で"2"を追加 }; arraylistの「先頭からイテレータを使って呼び出していくのと同時に,後ろに50%の確率で"2"を追加していきたい」のですが, うまく動作しません.「」の中のような動作を行うには,どうすればいいでしょうか? よろしくお願いします.

みんなの回答

回答No.4

イテレータはイテレートしているコレクションが変更されると 使えなくなります。

回答No.3

次のようなExceptionが出ました: Exception in thread "main" java.util.ConcurrentModificationException at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372) at java.util.AbstractList$Itr.next(AbstractList.java:343) at javaapplication1.JavaApplication1.main(JavaApplication1.java:29) Java Result: 1 並列に関係するみたいので詳しくは。。。2つのオビジェクとが一つのリストを扱うときの問題みたいです。 当たり前ですが、リストを読むのだけならたぶん問題ないんだと思うんですが。 ですがプログラム自体が意味不明なので、最終的に何をしたいのかわからないのでどう指摘したらいいか。。。 まあ Iteratorでなくてもリストを回れるので: for (int i = 0; i < list.size(); i++) { if (Math.random() < 0.5) { list.add(new Integer(2));//50%の確率で"2"を追加 } }

  • teketon
  • ベストアンサー率65% (141/215)
回答No.2

原則、Iteratorは取得元のCollection(この場合、ArrayList)に変更があった場合は、再取得です。 > if(Math.random()<0.5) list.add(new Integer(2));//50%の確率で"2"を追加 ですから、上記のコードを、1/2の確率でArrayListに追加したあと、 Iteratorの再取得を行います。 > if(Math.random()<0.5){ > list.add(new Integer(2)); > it = list.listIterator(list.size()-1); > } ListIterator、List.size()-1は、指定したIndex位置からのIteratorの取得を行います。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

「うまく動作しません.」というのは、具体的にどううまくいかないのですか?

関連するQ&A

専門家に質問してみよう