LinkedList简介
以下源码是 jdk1.7.8.0
LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。
LinkedList 实现 List 接口,能对它进行队列操作。
LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。
LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。
LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。
LinkedList 是非同步的。
1,成员变量
//节点
private transient Entry<E> header = new Entry<E>(null, null, null);
//实际大小size
private transient int size = 0;
header:链表的表头,表头不包含任何数据。Entry是个链表类数据结构。
size:LinkedList中元素个数
2,构造方法
public LinkedList() {
header.next = header.previous = header;
}
public LinkedList(Collection<? extends E> c) {
this();
addAll(c);
}
从源码可以看出LinkedList底层是通过双向链表实现的
3,方法
1.add()方法:向集合中添加元素
2.remove(object o):删除集合中与元素o相同的
LinkedList增加了自己一些特殊的方法
void addFirst(Object obj) :添加元素的集合的第一个
void addLast(Object obj) :添加元素到集合的末尾
Object getFirst() :得到集合第一个元素
Object getLast():得到集合最后一个元素
Object removeFirst() :删除集合第一个元素
Object removeLast():删除集合最后一个元素
// 获取LinkedList的第一个元素
public E getFirst() {
if (size==0)
throw new NoSuchElementException();
// 链表的表头header中不包含数据。
// 这里返回header所指下一个节点所包含的数据。
return header.next.element;
}
// 获取LinkedList的最后一个元素
public E getLast() {
if (size==0)
throw new NoSuchElementException();
// 由于LinkedList是双向链表;而表头header不包含数据。
// 因而,这里返回表头header的前一个节点所包含的数据。
return header.previous.element;
}
// 删除LinkedList的第一个元素
public E removeFirst() {
return remove(header.next);
}
// 删除LinkedList的最后一个元素
public E removeLast() {
return remove(header.previous);
}
// 将元素添加到LinkedList的起始位置
public void addFirst(E e) {
addBefore(e, header.next);
}
// 将元素添加到LinkedList的结束位置
public void addLast(E e) {
addBefore(e, header);
}
// 判断LinkedList是否包含元素(o)
public boolean contains(Object o) {
return indexOf(o) != -1;
}
// 返回LinkedList的大小
public int size() {
return size;
}