JDK源码学习系列05----LinkedList
1.LinkedList简介
LinkedList是基于双向链表实现的,它也可以被当作堆栈、队列或双端队列进行操作。
LinkedList继承了AbstractSequentialList<E>,并实现了List<E>, Deque<E>, Cloneable, java.io.Serializable等接口。AbstractSequentialList 实现了get(int
index)、set(int index, E element)、add(int index, E element) 和 remove(int index)这些函数.
2.LinkedList的成员变量
LinkedList有两个成员变量,表头 header 和长度size.
3.LinkedList的构造函数
4.LinkedList的内部类。
a.Entry<E>是LinkedList的节点类,节点类包含:当前节点的值,前一节点,后一节点。该节点类是一个静态内部类:当内部类对象不需要访问外围类对象时,应该声明为静态内部类。
b.ListItr 是 LinkedList 的迭代器类
c.
5.LinkedList的成员函数
由于LinkedList的成员函数很多,就不单独每一个做为一部分,把一些类似的函数放在一起,经常被调用的比较复杂的函数再单独介绍。
a.
b. boolean remove(Object o) / E remove() / E remove(Entry<E> e)
c.boolean addAll(Collection<? extends E> c) / boolean addAll(int index, Collection<? extends E> c)
d.
e.Entry<E> entry(int index)
此方法得到某索引对应的节点对象
f.
g.Entry<E> addBefore(E e, Entry<E> entry)
h.
i.
5.方法归类
a.LinkedList可以作为FIFO(先进先出)的队列,作为FIFO的队列时,下表的方法等价:
队列方法 等效方法
add(e) addLast(e)
offer(e) offerLast(e)
remove() removeFirst()
poll() pollFirst()
element() getFirst()
peek() peekFirst()
b.LinkedList可以作为LIFO(后进先出)的栈,作为LIFO的栈时,下表的方法等价:
栈方法 等效方法
push(e) addFirst(e)
pop() removeFirst()
peek() peekFirst()
6.总结
a.LinkedList是以双链表的形式实现的。
b.LinkedList即可以作为链表,还可以作为队列和栈。
c.LinkedList是 非 线程安全的。