hasPrevious()方法不起作用

时间:2013-04-21 17:00:01

标签: java arrays list iterator

我不明白为什么我的hasPrevious迭代器不起作用,它看起来像这样:

public void previousSong(){
    Iterator<Song> iterator = songs.iterator();
if(iterator.hasPrevious()) {
        System.out.println(iterator.previous().toString());
}
}

我有另一个使用hasNext()的函数,它可以工作,但是这个不会。

public void nextSong(){
    Iterator<Song> iterator = songs.iterator();
if(iterator.hasNext()) {
        System.out.println(iterator.next().toString());
}
}

我不确定这种方法是否已经存在,但是当我研究它时,Java网站就会提到它。我不明白为什么它不起作用。

5 个答案:

答案 0 :(得分:3)

仅为ListIterators(http://docs.oracle.com/javase/1.5.0/docs/api/java/util/ListIterator.html)定义hasPreviousprevious方法,这是Iterator的子接口。由于您只使用Iterator,因此唯一定义的方法是hasNext()nextremove - 请参阅此处:http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Iterator.html

答案 1 :(得分:0)

只有ListIterator可以向后走。正常的Iterator类不能。

因此,如果您使用ListIterator代替Iterator,那么它将起作用:)

答案 2 :(得分:0)

应该是这样的:

       public void previousSong(){
        ListIterator<Song> it = songs.listIterator();
    while(it.hasNext()) {
            System.out.println(it.next().toString());
    }

   // and now you can use hasprevious()

      while(it.hasPrevious()) {
            System.out.println(it.previous().toString());
    }
}

答案 3 :(得分:0)

// Create an array list

ArrayList list = new ArrayList();   

  // add elements to the array list
      list.add("C++");
      list.add("Java");
      list.add("Php");
      list.add("Python");
      list.add("Ruby");
      list.add("Perl");

     //Create the object of ListIterator through listIterator() method
      ListIterator object=list.listIterator();
     // Modify the list element 
      while(object.hasNext()) {
          String language=(String) object.next() ;
          object.set(language+"+");
      }
     // Show element in pervious order
      while(object.hasPrevious()) {
          System.out.println(object.previous());
      }

它应该首先在向前方向然后在向后方向上实现。

答案 4 :(得分:0)

在此接口中不使用迭代器hasPrevious()函数未定义 使用ListIterator

    ListIterator lt =al.listIterator(al.size());
    while(lt.hasPrevious())
    {
        System.out.println(lt.previous());
    }

这将进入收集对象的最后一个位置