2016-12-21 8 views
-1

ArrayListとIteratorsを初めて使用しました。私はArrayList内でArrayListの簡単な実装を試していました。イテレータをJavaで2回使用する

私は、メモリと呼ばれる多くのArrayListsを持つbugというArrayListを作成しました。メモリArrayListは単なるランダムな整数です。これは何も印刷されません

import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.Random; 

public class TestList { 
public static void main(String args[]){ 
    int N=5; 
//outer ArrayList 
    ArrayList<ArrayList> bug = new ArrayList<ArrayList>(); 
    for(int i=0 ; i<N ; i++) 
    { 
     //inner ArrayList 
     ArrayList memory = new ArrayList(); 
     bug.add(memory); 
    } 

    Iterator<ArrayList> outer = bug.iterator(); 
    while(outer.hasNext()) 
    { 
     ArrayList memory = outer.next(); 
     memory.add(new Random().nextInt(10));    
    } 


    while(outer.hasNext()) 
    { 
     ArrayList memory = outer.next(); 
     Iterator inner = memory.iterator(); 

     System.out.println(inner.next()); 
    } 

} 
} 

: は、ここでは、コードです。しかし、outer01のようなバグのための別のイテレータ(表示目的用)を作成すると、コードが機能します。

Iterator<ArrayList> outer01 = bug.iterator(); 
    while(outer01.hasNext()) 
    { 
     ArrayList memory = outer01.next(); 
     Iterator inner = memory.iterator(); 

     System.out.println(inner.next()); 
    } 

だから私の質問はこれである - それはアレイリストの最後に到達したとき、イテレータは「切れ」そしてそうならば、リストの先頭に戻ってそれを送信するためにどのような方法があるのでしょうか??

ありがとうございました。

答えて

4

はい、「不足しています。新しいイテレータを作成するには、にはがあります。もう一度outer = bug.iterator()としてください。

(あなたがListIteratorを得ていた場合は、previous()との後方を歩くことができるが、これは率直に言って非常に長い時間がかかるとはるかに無駄ちょうど新しいイテレータを取得するよりもなります。)

0

はい。イテレータは最初にループバックしません。あなたの最初のコードサンプルでは、​​ループの条件付きで2番目のwhileに達したときに次のオブジェクトはまだありません。本質的に、イテレータには、別のループのために「hasNext」が要求されているという知識(またはコンテキスト)がありません。

関連する問題