1日1クラス、少しも疲れていないLinkedList

5328 ワード

私たちのスローガンは、一日一種類で、少しも疲れません.の
今日お話しするのは--LinkedList
まず、彼の組織構造を見てみましょう.
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

前回紹介した2つのクラスに比べて、彼の実装インタフェースにはQueue&Dequeが1つ増えています(1つはキューで、1つは両端キューです)
これもリストが実現する以上、同様にリストのいくつかの性質を有する、リスト中のオブジェクトがNULLであることを覚えているかどうかは不明である.
APIの公式サイトでは、「Note that this implementation is not synchronized.」つまりLinkedListも非スレッドで安全です.
ArrayListと同様に、ライブラリにスレッドセキュリティの実装方法があります.
  List list = Collections.synchronizedList(new LinkedList(...));
スレッド以外の安全な容器には、そのオブジェクトの変化回数を記録するカウンタmodCountがある.
【まず、このLinkedListでは、firstとlastの2つのオブジェクトを維持しています.データ型はノードの内部クラスです.
  
    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;

        }

    }

 
1、構造方法:  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.
 
2、まず特別に説明します.
Transient,このようなオブジェクトはシーケンス話を進行する際にシーケンス化される必要はなく,一時的である.
ソースを読むときによくこのキーワードが出てくるからです.
 
3、これはチェーンテーブルなので、チェーンテーブルに関する操作がいくつか提供されています.
  e.g. getFirst() getLast()......
 
4、注目すべきは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     }

これにより、特定の場面でのニーズを満たすことができます.
 
わあ、この類は言うことが少ないですね.~~~~
いくら言わないで、もっと考えて練習しています.
中国にはことわざがある.
聞かなければ聞かず、聞かなければ見ず、見ては知らず、知ってはいけない.