美文网首页
LinkedList源码学习

LinkedList源码学习

作者: supory | 来源:发表于2018-03-07 15:58 被阅读2次

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

    相关文章

      网友评论

          本文标题:LinkedList源码学习

          本文链接:https://www.haomeiwen.com/subject/xqlmxftx.html