该List是双向链表,也就是说每一个节点都有一个指向前面的指针和一个指向后面节点的指针.
继承关系:
该类继承了AbstractSequentialList,AbstractSequentialList是一个抽象类,它又继承了AbstractList,它将其中的一下方法进行重写,如下图:
作为一个List,它自然要实现List接口,Cloneable实现深,java.io.Serializable实现序列化.
成员变量:
size代表的是list的长度,其余两个为Node对象,first指向List的头,last指向List的尾部,其中Node定义如下:
该类内部有一个变量用于保存元素,另外两个Node分别指向前一个Node和后一个Node.
构造方法:
两个构造方法,其中一个是无参的,另外一个接收一个collection,调用addAll()对List进行初始化.
成员方法:
私有方法,外部无法直接调用,该方法的作用是将接收的元素设置为first
接收一个元素,构造一个prev为null的Node对象,再将其设置为头部也就是first变量.进行该操作分为两种情况,一种是List中已经有元素存在即first已经有元素,在将参数设置为头节点的同时,需要将原来头节点的prev指向现在的first,保证List不会断开;而当List是空的时候,需要将last也指向头节点.此刻first=last.
default方法,同一包内的类可见.作用是将传入的元素设置为last.
构造一个next为null的节点,将其prev设置为last,并将last指向自己,然后判断原last是否为空,如果为空则意味着原来的List中是没有元素的,此时last也是first,需要将furt指向自己.如果不为空,那么将原来的last的next指向新增加的Node.
默认方法,同一包内可见.做用是在指定的节点前面插入一个节点.
构建newNode使其的prev指向succ的prev,next指向succ,这样将newNode连接上了List,在将succ.prev指向新的节点,pred指向新的节点完成双向连接.同时判断succ是否时first,如果是的话需要将first指向新的节点.
私有方法,同一类内可见.作用是将first移除并返回其中的元素.
通过将first中的element和next设置为null,调用系统GC,同时将first指向next,并且把next的prev设置为空.最后判断first是否还是last.如果是还要将last设置为null.
默认方法,同一包内可见.作用将传入的节点从List中删除.
获取传入节点的prev和next,判断该节点是否是last或first,如果是要进行调整,否则将prev和next进行相互的链接,并返回节点元素.
公有方法,所有类可见.作用:获取first或last的元素.
公有方法,所有类可见.作用:移除first或last.
通过调用上面提到的unlinkFirst(),unlinkLast()完成
作用:往list中插入first或last
通过上面提到的linkFirst()和linkLast()完成
公有方法,作用:添加元素到list的尾部
通过linkLast()完成
公有方法,作用:移除指定的元素
通过next遍历整个list,对遇到的第一个节点,调用unlink()进行移除.
公有方法,作用:将指定集合中所有的元素添加到List的尾部
调用addAll(size,Collection)
公有方法,作用:将传入的集合中的所有元素添加到指定的位置前面,当且仅当指定的位置是list的尾部时,将所有元素添加到list的末端
使用node()获取指定的节点,以指定节点大prev作为起始节点,将集合的元素一个个连接到后面.
公有方法,作用:将list中的元素清空
公有方法,作用:get获取指定位置的元素,set设置指定位置的元素
二者都调用了node(int index)方法获取指定位置的元素
默认方法,同一包下可见.作用:获取指定index的node
通过判断index与list中点的大小,确定时从first往后遍历或则是从last往前遍历.
公有方法,作用:add如果指定的位置是last,则将元素添加到list的尾部,否则将list添加到指定位置的前面.remove移除指定位置的元素
公有方法,作用:从first往后遍历,获取第一个遇到的指定元素下标.
公有方法,从last往前遍历获取第一个遇到的指定元素下标.
公有方法.作用都是获取first的元素,区别peek在first为null时会返回null,而element则时抛出NoSuchElementException
公有方法,作用:获取并移除第一个元素.
公有方法,作用添加元素到List的尾部.内部调用的是add()