2017-04-04 82 views
-5

表達的LinkedList的字符的代碼實例:如何理解LinkedList?

public class SimpleLinkedListTest { 
    private class Node{ 
     public Node(Object o) { 
      this.o = o; 
     } 
     Object o; 
     Node next; 
    } 

    private Node first; 

    public void add(Object elem){ 
     Node node = new Node(elem); 
     if (first == null) { 
      first = node; 
     } else { 
      append(node); 
     } 
    } 

    private void append(Node node){ 
     Node last = first; 
     while(last.next != null){ 
      last = last.next; 
     } 
     last.next = node; 
    } 
} 

實例介紹了「產業鏈特徵」到封裝的新對象,我怎麼能理解「追加」的方法時,什麼是確切的 「封裝進程」LinkedList類型執行?

+0

閱讀維基百科有關鏈接列表的文章。 – GhostCat

回答

3

LinkedList有兩個指針第一個和最後一個節點。

public class LinkedList<E> 
    extends AbstractSequentialList<E> 
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable 
{ 
    transient int size = 0; 

    transient Node<E> first; 

    transient Node<E> last; 

而且節點類有下一個和以前的兩個指針:

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; 
     } 
    } 

現在,當你添加新的元素列表的末尾需要最後一個節點,並使用它的下一個參考鏈接到新節點包含您的元素:當你添加元素列表的開始,但是這一次它去Node first指針

void linkLast(E e) { 
     final Node<E> l = last; 
     final Node<E> newNode = new Node<>(l, e, null); 
     last = newNode; 
     if (l == null) 
      first = newNode; 
     else 
      l.next = newNode; 
     size++; 
     modCount++; 
    } 

同樣的情況。

而當你想刪除元素,它將空指定給Node next指針Node類。