java的Arraylist实现的接口详解以及浅聊以下ListIterator接口

81 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情

前言

在上一篇文章中,我讲述了Collection接口对应的一些方法,同时还写其子接口List和实现List接口的ArrayList和LinkedList.所以今天我们的主题就是叙述ListIterator(绝对不是忘记写了)和详解ArrayList。

ListIterator

在之前的文章是我们说了Iterator的作用,以及Iterator的一些优点,感兴趣的可以前往我之前文章观看。让我们从名字出发。从这个英文名字出发我们就大概可以知道他是Iterator的一个扩展。

int nextIndex();
int previousIndex();
boolean hasPrevious();
E previous();`
void add(E e);
void set(E e);

以上就是ListIterator扩展实现的功能,就如上面代码所示,新增了add和prevoius和set相关的方法。这些与之前的Iterator接口仅仅只能正序遍历和只有remove方法不一样,previous方法使我们可以从倒序开始遍历。add和set就和之前说的remove方法一样,你在遍历是如果直接改变了集合就会报错,但是你如果用迭代器实现集合中所有的偶数-1,就可以使用迭代器的set,非常好用。

Arraylist实现的接口

在这一部分我们会从源码入手,详细的了解ArrayList类。首先来看看ArrayList实现什么接口。

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable

在上面的代码中我们可以看到实现这四个借口 List, RandomAccess, Cloneable, java.io.Serializable。list接口自然不用多说是肯定要继承的。然后就是RandomAccess,在我查阅了相关的资料之后,RandomAccess只是一个标记接口,并没有实际的意思。他存在的目的是为了告诉编译器这个是支持随机访问的,也就是说其的加强for循环是要比迭代器快的。而像linkedList数组是不会实现这个接口的。

public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable    

至于剩下的两个接口也是标记接口,一个是有关于克隆的,另一个是文件流序列化的。就不在这里详说了。