2017-04-16 11 views
0

私はとArrayListのためのイテレータを使用していました。そして、それはこのように、反復子で作業しようとしたListIteratorの使い方

List<String> al = new ArrayList<>(); 
// ----- Logic for adding elements----- 
Iterator it = al.iterator(); 
// logic to retrieve elements---- 

ListIterator li = al.listIterator(); 
    while(li.hasNext()) { 
     System.out.print(li.next()+" "); 
    } 

それが働いて...

は、私は後方に検索

ListIterator li = al.listIterator(); 
while(li.hasPrevious()) { 
     System.out.print(li.previous()+" "); 
    } 

しかし、その動作していないためにこれを試してみました。

以下のコードが動作しています。

ListIterator<String> li = al.listIterator(al.size()); 
    while(li.hasPrevious()) { 
     System.out.println(li.previous()+" "); 
    } 

ジェネリックスのコンセプトはあるのでしょうか?それはわかりません。 IteratorとListIteratorの両方の概念を明確にしてください。 ListIteratorの1つのステートメントが他のものを動作させているのはなぜですか?

答えて

6

最初のものはリストの先頭から始まり、前の要素はありません。

2番目は最後から始まり、前の要素があります。

これは簡単です。

+0

あなたは速かった:/ – sschrass

0

使用している:

ListIterator<String> li = al.listIterator(al.size()); 

を呼び出している:

ListIterator<E> List.listIterator(int index) 

は、内の指定された位置で始まる、(適切な順序で)このリスト内の要素を、リストの反復子を返します。リスト。

リストの最後にリストイテレータを開始し、それとhasPrevious()が動作します。

-

しかしListIterator li = al.listIterator(); であなたが最初から繰り返しを始めているし、それが何の前の要素を持っていません。

IDEを使用してデバッグポイントを設定して条件を評価することをお勧めします。

リファレンスJava doc here詳細については、

関連する問題