天天看点

JDK源码学习系列05----LinkedList

                                         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是 非 线程安全的。

继续阅读