web-dev-qa-db-ja.com

リンクリスト要素を逆の順序で繰り返す方法は?

私はJavaコレクションに不慣れで、なぜリンクリストの要素を逆方向にトラバースできないのか疑問です。以下では、私が何をしたかを説明し、疑問を明確にしてください。

  1. 順方向の反復用にiterator、逆方向の反復用にlistiteratorインターフェイスを作成しました。なぜ後方反復が機能しないのですか?
  2. 同じプログラムでiteratorおよびlistiteratorインターフェイスを使用して、順方向および逆方向の反復で要素のセットをトラバースすることはできませんか?

    コードスニペット :

    import Java.util.*;
    class NewClass{
    public static void main(String args[]){
      LinkedList<String> obj = new LinkedList<String>();
    
       obj.add("vino");
       obj.add("ajith");
       obj.add("praveen");
       obj.add("naveen");
    
       System.out.println(obj);
    
       System.out.println("For loop ");
       //using for loop
       for(int count=0; count < obj.size(); count++){
         System.out.println(obj.get(count));
       }
      System.out.println("For each loop ");
    
      //using foreach loop
      for(String s:obj){
         System.out.println(s);
      }
      System.out.println("Whileloop ");
    
      //using whileloop
      int count=0;
      while(obj.size() > count){
          System.out.println(obj.get(count));
        count++;
      }
      System.out.println("Forward Iterations ");
      //using iterator 
      Iterator it = obj.iterator();
      while(it.hasNext()){
         System.out.println(it.next());
      }
      ListIterator lit = obj.listIterator();
      System.out.println("Backward Iterations");
       while(lit.hasPrevious()){
        System.out.println(lit.previous());
          }
        }
     }
    

    出力

    [vino, ajith, praveen, naveen]
     For loop 
     vino
     ajith
     praveen
     naveen
    For each loop 
     vino
     ajith
     praveen
     naveen
    Whileloop 
     vino
     ajith
     praveen
     naveen
    Forward Iterations 
     vino
     ajith
     praveen
     naveen
     Backward Iterations
    

後方反復の出力はどこにありますか?誰か助けてください。よろしくお願いします。

9
Vinoth Vino

descendingIterator が必要だと思います。

Iterator lit = obj.descendingIterator();
System.out.println("Backward Iterations");
while(lit.hasNext()){
  System.out.println(lit.next());
}
18
tph

それは可能ですが、メソッドlistIterator(int index)を使用して、Listの最後から開始することを指定する必要があります。

LinkedList<String> obj = new LinkedList<String>();

obj.add("vino");
obj.add("ajith");
obj.add("praveen");
obj.add("naveen");

ListIterator<String> it = obj.listIterator(obj.size());
while (it.hasPrevious())
    System.out.println(it.previous());
4
Paul Boddington