加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

ListIterator接口源码分析-java8

发布时间:2020-12-14 06:39:39 所属栏目:Java 来源:网络整理
导读:h4 id="1listiterator-vs-iterator"1.ListIterator VS Iterator: ListIterator是对接口Iterator的继承 Iterator只有4个操作方法:hasNext,next,remove,forEachRemaining,其中forEachRemaining是JDK8新增方法 ListIterator比Iterator多出5个方法:hasPre

<h4 id="1listiterator-vs-iterator">1.ListIterator VS Iterator:

  • ListIterator是对接口Iterator的继承
  • Iterator只有4个操作方法:hasNext,next,remove,forEachRemaining,其中forEachRemaining是JDK8新增方法
  • ListIterator比Iterator多出5个方法:hasPrevious,previous,nextIndex,previousIndex,setadd
  • 二者明显的区别:
    • Iterator只能从集合头部开始遍历,但ListIterator从尾部、头部都可以开始。
    • ListIterator通过set方法可以对集合中的值进行替换。替换被next()或者previous()返回的元素.故set方法只能在next或previous方法后面调用。
    • ListIterator通过add方法可以添加元素到集合中。指定元素被插入到next返回值的前面,or插入到被previous返回值的后面.

    package sourcecode.analysis;
/**
 * @Author: cxh
 * @CreateTime: 18/3/12 10:33
 * @ProjectName: JavaBaseTest
 */

import java.util.*;

/**
 * 这一迭代器允许程序员从list的任意方向对list进行遍历,* 在遍历过程中可以修改list,获取迭代器在list中的迭代位置.
 * ListIterator没有当前元素;
 * 它的游标位置总是previous()方法返回的元素和next()方法返回的元素之间.
 *
 * 长度为n的list有(n+1)个游标位置,解释如下:
 * <PRE>
 *                      Element(0)   Element(1)   Element(2)   ... Element(n-1)
 * cursor positions:  ^            ^            ^            ^                  ^
 * </PRE>
 *
 * 注意:remove方法和set方法并不是对游标位置进行定义的;他们是定义在由next()方法 or previous()方法返回的最后
 * 一个元素上的
 *
 * 这一接口是java集合框架中的一员.
 *
 * @since   1.2
 */
public interface ListIterator<E> extends Iterator<E> {
    /*-------查询操作-------*/

    //从前到后的遍历中,如果list中还有元素未被遍历,则返回true;否则false.
    boolean hasNext();

    //从前到后的遍历中,返回游标后的一个元素.
    E next();

    //从后到前的遍历中,如果list还有元素未被遍历,则返回true;否则false.
    boolean hasPrevious();

    /**
     * 返回将游标位置后退一位的元素.这一方法在list的反向遍历中可以重复 调用.
     * 也可以同next同时混合调用.
     * next和previous相间调用,则重复返回同一个元素.
     */
    E previous();

    // 返回下一个被next调用到元素的索引.
    int nextIndex();

    //返回下一个被previous调用到元素的索引.如果当前游标为0,则下一个返回-1
    int previousIndex();


    /*------修改操作-----*/

    /**
     * 删掉被next()或者previous()方法返回的最后一个元素.
     * 这一方法只能被next或者previous方法调用后,再被调用.
     */
    void remove();

    /**
     * 替换被next()或者previous()返回的元素.
     * 这一方法只能被next或者previous方法调用后,再被调用.
     */
    void set(E e);

    /**
     * 将指定元素插入到list中.
     * 这一元素被插入到next返回值的前面,or插入到被previous返回值的后面.
     */
    void add(E e);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读