基本数据结构是双向链表
非线程安全
类继承关系:
extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable
属性:
//元素个数
transient int
size =
0
;
//头指针
transient Node<
E>
first
;
//尾指针
transient Node<
E>
last
;
private static final long
serialVersionUID =
876323262645176354L
;
三个属性都使用transient修饰,表示无须序列化它。
插入和删除都是双链表的操作不多说。
获取index位置上的节点,会判断从头还是尾更近,从更近的方向开始。
Node<E> node(int index) {
// assert isElementIndex(index);
if (index < (size >> 1)) {
Node<E> x = first;
for (int i = 0; i < index; i++)
x = x.next;
return x;
} else {
Node<E> x = last;
for (int i = size - 1; i > index; i--)
x = x.prev;
return x;
}
}
这个实现实现队列的接口,可以作为队列使用。有poll, push, peek等相关方法的实现。