如何理解LinkedList?

时间:2017-04-04 04:11:26

标签: java

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

该实例描述了" Chain特征"要封装新的对象,我怎样才能理解"追加"它的方法是什么?确切的是什么 "封装过程" LinkedList类型执行?

1 个答案:

答案 0 :(得分:3)

LinkedList有两个指针,第一个和最后一个Node。

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;

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

现在,当您将新元素添加到列表末尾时,它会占用最后一个节点并使用其下一个引用将其链接到包含您的元素的新节点:

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 first指针。

当你想删除元素时,它会为Node next类的Node指针指定null。