LinkedList源码学习
/** * Doubly-linked list implementation of the {@code List} and {@code Deque} * interfaces. Implements all optional list operations, and permits all * elements (including {@code null}). * *
All of the operations perform as could be expected for a doubly-linked
* list. Operations that index into the list will traverse the list from
* the beginning or the end, whichever is closer to the specified index.
*双链表实现了List和Deque接口,实现了所有的运算接口且可以包含所有的类型(包括null),所有的运算方法可以运用到双列表中。通过索引操作列表,均是从先比较索引与列表头、尾的距离,然后从更近处开始索引。
*
Note that this implementation is not synchronized.* If multiple threads access a linked list concurrently, and at least * one of the threads modifies the list structurally, itmustbe * synchronized externally. (A structural modification is any operation * that adds or deletes one or more elements; merely setting the value of * an element is not a structural modification.) This is typically * accomplished by synchronizing on some object that naturally * encapsulates the list. * * If no such object exists, the list should be "wrapped" using the * {@link Collections#synchronizedList Collections.synchronizedList} * method. This is best done at creation time, to prevent accidental * unsynchronized access to the list:
* List list = Collections.synchronizedList(new LinkedList(...));
* *注意:LinkedList类不是线程安全的,非同步的。如果多个线程同时访问一个LinkedList,并且至少一个线程修改了list的结构,他必须从外部同步(操作诸如:增加或者删除一个或多个元素,仅仅是设置某对象的值并不算该类操作)。典型的实现方式就是通过一些对象封装list来实现同步线程安全。如果没有这种对象,list应使用LinkCollections的synchronizedList或者Collections.synchronizedList方法,防止意外的非线程安全访问list最好方法是在创建时就使用上述方案。
The iterators returned by this class's {@code iterator} and * {@code listIterator} methods arefail-fast: if the list is * structurally modified at any time after the iterator is created, in * any way except through the Iterator's own {@code remove} or * {@code add} methods, the iterator will throw a {@link * ConcurrentModificationException}. Thus, in the face of concurrent * modification, the iterator fails quickly and cleanly, rather than * risking arbitrary, non-deterministic behavior at an undetermined * time in the future. * *
迭代返回数据是通过iterator和listIterator方法快速失败。如果在iterator创建后,通过除了iterator自身的remove和add方法外的其他任意方法修改了列表结构,iterator将会抛出一个ConcurrentModificationException的异常。
Note that the fail-fast behavior of an iterator cannot be guaranteed * as it is, generally speaking, impossible to make any hard guarantees in the * presence of unsynchronized concurrent modification. Fail-fast iterators * throw {@code ConcurrentModificationException} on a best-effort basis. * Therefore, it would be wrong to write a program that depended on this * exception for its correctness:the fail-fast behavior of iterators
* should be used only to detect bugs.* *
注意:快速失败行为对于iterator是不被保证的。仅仅用来探测bugs.
This class is a member of the * * Java Collections Framework.
总结,双向循环列表,使用的是链表结构,因此在插入、删除、上具有优势,而ArrayList使用的是数组结构,因此在查询上相对有更高的效率。
注意:LinkedList是非线程安全的。