Java 迭代器和Listiterator之间的区别?

Java 迭代器和Listiterator之间的区别?,java,list,iterator,set,listiterator,Java,List,Iterator,Set,Listiterator,我们可以使用迭代器遍历集合或列表或映射。但是列表迭代器只能用于遍历列表,不能遍历集。为什么? 我知道主要的区别在于,使用iterator,我们只能向一个方向移动,而使用ListIterator,我们可以向两个方向移动。还有其他区别吗?和列表迭代器相比迭代器的任何优点?这些区别在Javadoc中列出,以供参考 你可以 向后迭代 在任意点获取迭代器 在任意点添加新值 在该点设置一个新值 有两个区别: 我们可以使用迭代器遍历集合和列表,还可以映射对象的类型。而ListIterator可用于遍历列表类

我们可以使用
迭代器
遍历
集合
列表
映射
。但是
列表迭代器
只能用于遍历
列表
,不能遍历
。为什么?


我知道主要的区别在于,使用iterator,我们只能向一个方向移动,而使用
ListIterator,我们可以向两个方向移动。还有其他区别吗?和
列表迭代器
相比
迭代器
的任何优点?

这些区别在Javadoc中列出,以供参考

你可以

  • 向后迭代
  • 在任意点获取迭代器
  • 在任意点添加新值
  • 在该点设置一个新值

有两个区别:

  • 我们可以使用迭代器遍历集合和列表,还可以映射对象的类型。而ListIterator可用于遍历列表类型的对象,但不能遍历集合类型的对象

    也就是说,我们可以使用Set和List获得迭代器对象,请参见此处:

    通过使用迭代器,我们只能在前进方向上从集合对象检索元素

    迭代器中的方法:

  • hasNext()
  • next()
  • remove()
  • 但我们仅从列表接口获取ListIterator对象,请参见此处:

    其中,作为ListIterator,您可以在任意方向(向前和向后)进行遍历。因此,除了迭代器的方法外,它还有另外两种方法,如
    hasPrevious()
    previous()
    。此外,我们还可以获取下一个或上一个元素的索引(分别使用
    nextIndex()
    previousIndex()

    ListIterator中的方法:

  • hasNext()
  • 下一个()
  • 前()
  • hasPrevious()
  • 删除()
  • nextIndex()
  • 以前的索引()
  • i、 例如,我们无法从Set接口获取ListIterator对象

    参考资料:-

    迭代器是ListIterator的超类

    以下是它们之间的区别:

  • 使用
    iterator
    只能向前移动,但使用
    ListIterator
    也可以在读取元素时向后移动单词
  • 使用
    列表迭代器
    可以在遍历时在任意点获取索引,而使用
    迭代器
    s则不可能
  • 使用
    迭代器
    可以只检查下一个元素是否可用,但在
    列表迭代器
    中可以检查上一个和下一个元素
  • 使用
    listiterator
    可以在遍历时随时添加新元素。使用
    迭代器
    不可能
  • 使用
    列表迭代器
    可以在遍历时修改元素,这在
    迭代器
    中是不可能的
  • 迭代器外观:

    ListIterator listiterator = List.listIterator();
     public interface Iterator<E> {
        boolean hasNext();
        E next();
        void remove(); //optional-->use only once with next(), 
                             dont use it when u use for:each
        }
    
    公共接口迭代器{
    布尔hasNext();
    E next();
    void remove();//可选-->仅与next()一起使用一次,
    使用时不要使用它:每个
    }
    
    ListIterator外观:

    ListIterator listiterator = List.listIterator();
     public interface Iterator<E> {
        boolean hasNext();
        E next();
        void remove(); //optional-->use only once with next(), 
                             dont use it when u use for:each
        }
    
    公共接口ListIterator扩展了迭代器{
    布尔hasNext();
    E next();
    布尔hasPrevious();
    E先前的();
    int-nextIndex();
    int previousIndex();
    void remove();//可选
    无效集(E);//可选
    void add(E);//可选
    }
    
    下面是迭代器和listIterator之间的区别

    迭代器:

    boolean hasNext();
    E next();
    无效删除();
    
    列表迭代器:

    boolean hasNext();
    E next();
    布尔hasPrevious();
    E先前的();
    int-nextIndex();
    int previousIndex();
    无效删除();
    无效集(E);
    无效添加(E);
    
    除了Peters的答案之外,我建议您阅读《用java思考迭代器》中的一章,其中有所有很好的例子,您不能使用
    集来实现这一点的原因很简单:没有“当前点”:元素没有索引,也没有添加“before”或“after”元素的有效方法另一个。@Peter Lawrey在任意点获取索引-是关于方法previousIndex()和nextIndex()?@gstackoverflow check java.util.List#listIterator(int)@kilonet,而不是在任意点获取索引,如果它的措辞类似于“在任意点获取迭代器”为了避免混淆?这看起来像是从中剪切和粘贴的。你必须始终承认原作者。
    
    public interface ListIterator<E> extends Iterator<E> {
        boolean hasNext();
        E next();
        boolean hasPrevious();
        E previous();
        int nextIndex();
        int previousIndex();
        void remove(); //optional
        void set(E e); //optional
        void add(E e); //optional
    }