一天一個類,一點也不累 之 LinkedList

咱們的口號是,一天一個類,一點也不累 。。java

今天要講的是---LinkedList安全

首先,仍是看看他的組織結構ide

Class LinkedList<E>

    java.lang.Object
        java.util.AbstractCollection<E>
            java.util.AbstractList<E>
                java.util.AbstractSequentialList<E>
                    java.util.LinkedList<E>

    Type Parameters:
        E - the type of elements held in this collection

    All Implemented Interfaces:
        Serializable, Cloneable, Iterable<E>, Collection<E>, Deque<E>, List<E>, Queue<E>


    public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, Serializable

相比上兩次介紹的兩個類,他的實現接口多了一個Queue & Deque(一個是隊列一個是雙端隊列)this

既然這個也實現了List,一樣具備List的一些性質,不知你們是否還記得List中的對象允許爲NULL.spa

在API的官網上面明確說了一句:【Note that this implementation is not synchronized.】 也就是說LinkedList也是非線程安全的。
線程

和ArrayList同樣,庫中存在線程安全的實現方法:code

  List list = Collections.synchronizedList(new LinkedList(...));對象

因此在非線程安全的容器裏面會有一個用來記錄該對象改變次數的計數器modCount.
blog

【首先聲明一下,這個LinkedList裏面維持這兩個對象,一個是first,一個是last,他們的數據類型是Node的內部類。接口

  

    private static class Node<E> {
        E item;
        Node<E> next;
        Node<E> prev;

        Node(Node<E> prev, E element, Node<E> next) {
            this.item = element;
            this.next = next;
            this.prev = prev;
        }
    }

 

一、構造方法:

  LinkedList()

    Constructs an empty list.

  LinkedList(Collection<? extends E> c)

    Constructs a list containing the elements of the specified collection, in the order they are returned by the collection's iterator.
 
二、首先特別解釋一下, transient,這樣的對象在行進序列話的時候,  是不被需序列化的,是臨時的。
   由於在讀源碼的時候常常會出現這個關鍵字。
 
三、由於這個是鏈表,因此提供了一些關於鏈表的操做。
  e.g. getFirst() getLast()。。。。。。
 
四、值得注意的是從1.6開始,新增了一項稱道的方法(雖然本身能夠方便實現),這就是可以生成倒序的迭代器。
 1 /**
 2      * Adapter to provide descending iterators via ListItr.previous
 3      */
 4     private class DescendingIterator implements Iterator<E> {
 5         private final ListItr itr = new ListItr(size());
 6         public boolean hasNext() {
 7             return itr.hasPrevious();
 8         }
 9         public E next() {
10             return itr.previous();
11         }
12         public void remove() {
13             itr.remove();
14         }
15     }

這樣以來就知足了在特定場合的須要。

 

哇喔,這個類要說的好少啊!~~~

再也不說的多少,而在多思多練。

中國有句諺語:

        不聞不若聞之,聞之不若見之,見之不若知之,知之不若行之。

相關文章
相關標籤/搜索