2016-04-10 8 views
1

これが可能かどうか、もしあれば、どうすればいいのですか? 基本的に私が見たことは問題だと思うのは、関数を追加しているときにイテレータのカーソルが動いているということです(これは問題があるかどうかわからないので繰り返しは分かりません)。もう2つ(それは私が問題を見つけた特定のケースです)。それを反復して新しい要素を繰り返しながらリストを変更する

私のコードは次のようなものです:

List<String> list =new ArrayList<>(); 
for (ListIterator<String> iterator = list.listIterator(); iterator.hasNext();) 
     //here i am adding and removing elements 
+0

これはJavaですか?あなたが使用している言語を人々に伝えれば助けになります。彼らは違います。 –

+0

とにかく、答えはあなたができない、あなたはする必要はありません。コピーを繰り返します。あなたがJavaでそれをどうやって行うのかわかりませんが、ここで十数例を見つけることは間違いありません。 –

+0

申し訳ありませんが、私はそれがJavaであると書いているのを忘れていましたが、返事はありがたいですが、要素を追加する条件が以前に追加した要素に依存するため、できません。 – user18497

答えて

0

反復子JLS

によると、プログラマがいずれかの方向にリスト を通過することを可能にするリストのイテレータ、中にリストを変更しますイテレータの現在の位置をリスト内の というように取得します。 ListIteratorには現在の要素がありません 要素です。そのカーソル位置は、previous()の呼び出しによって返される要素 と、next()の呼び出しによって返される要素 との間にあります。

enter image description here

削除、追加()を使用することができる(): 以下キャレット(^)で示されるように、長さn のリストについては、反復子は、N + 1つの可能なカーソル位置を有しますイテレータで変更を行うメソッドと同じものがリスト参照に反映されます。


JLS

に従って削除リストから次の()または 前()(任意のオペレーション)によって返された最後の要素を削除します。この呼び出しは、 nextまたはpreviousに1回だけ行うことができます。 add(E)が でない場合にのみ、nextまたはpreviousへの最後の呼び出しの後に呼び出されます。

だから、それがスローされます)((次の)または前呼び出さず二度削除を使用する場合java.lang.IllegalStateException
私は

public static void main(String[] args) { 

    List<String> list =new ArrayList<>(); 
    list.add("55"); 
    list.add("155"); 
    list.add("255"); 
    for (ListIterator<String> iterator = list.listIterator(); iterator.hasNext();){ 

     System.out.println(list.size()); 
     iterator.add("88"); 
     System.out.println(list.size()); 
     iterator.next(); 
     System.out.println(list.size()); 
     iterator.remove(); 
     System.out.println("first remove done"); 
     iterator.remove(); // will throw exception if previous or next is not called 
    } 

    System.out.println(list); 
} 
)((追加)と削除をテストするようにコードを修正
関連する問題