即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

java集合系列05 Iterable Iterator ListIterator

编程语言 weixin_36210698 17℃ 0评论
本文目录
[隐藏]

费话不多说,还是先上uml图


这里写图片描述


Java集合框架中绝大多数的类都间接或直接的实现并依赖于Iterable

1.Iterable

1.1.文档介绍

实现此接口允许此类的实例成为for-each循环语句的目标

1.2.源码

public interface Iterable{
    //返回一个迭代器,可遍历整个集合元素
    Iterator iterator();
}

2.Iterator

2.1.文档介绍

一个遍历整个集合迭代器,Iterator替换了Java集合框架的Enumeration类,迭代器与枚举有两点不同:

  1. 迭代器在迭代集合期间可以删除集合的元素
  2. 方法全名更加精简

2.2.源码

public iterface Iterator{
    //判断集合是否有下一个元素
    boolean hasNext();

    //返回集合的下一个元素
    E next();

    //删除next()返回的元素,
    //每调用一次next()方法只能调用一次remove()方法
    //如果在迭代集合期间,调用了此方法这外的其他方式修改了该迭代器所指向的collection,则迭代器的行为是不确定的
    default void remove(){
        throw new UnsupportedOperationException("remove");
    }

3.ListIterator

3.1.文档介绍

列表迭代器,允许程序员按任意方向遍历列表、迭代期间修改列表,并获得迭代器在列表中的当前位置。ListIterator没有当前元素;它的光标位置始终位于调用previous()所返回的元素和调用next()所返回的元素之间。

3.2.源码

public iterface ListIterator extends Iterator{
    boolean hasNext();
    E Next();
    boolean hasPrevious();
    E previous();
    int nextIndex();
    int prevouseIndex();

    //修改操作

    //删除next()或previous()方法最后返回的元素,此方法只能在每次调用next()或previouse()方法之后并且没有调用add方法时使用
    void remove();
    //修改next()或previous()方法最后返回的元素,此方法只能在
    //每次调用next()或previouse()方法,并且没有调用remove()或add()方法时使用
    void set(E e);
    //将指定的元素插入列表(可选操作)。该元素直接插入到 next 返回的下一个元素的前面(如果有),或者 previous 返回的下一个元素之后(如果有);如果列表没有元素,那么新元素就成为列表中的唯一元素。新元素被插入到隐式光标前:不影响对 next 的后续调用,并且对 previous 的后续调用会返回此新元素(此调用把调用 nextIndex 或 previousIndex 所返回的值增加 1)。
    void add(E e);

我研究到这的时候,虽然明白怎么使用,但是对其源码还不了解,所以等到讲解ArrayList的源码时,再详细说明吧。

也许下面这张图可以说清ListIterator()的使用原理


^Element(0) ^ Element(1) ^ Element(2) ^ … ^Element(n-1)^


^代表指针 remove()会删除指针后面的一个元素,add()会在当前指针插入元素,


previous()返回当前指定的前一个元素,next()返回当前指定的后一个元素,previousIndex()返回要返回前一个元素的索引,nextIndex()返回要返回的下一个元素的索引

转载请注明:CodingBlog » java集合系列05 Iterable Iterator ListIterator

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情