JDK源碼系列:LinkedList

簡介

LinkedList是一個雙向鏈表,實現了List和Deque接口。這意味着LinkedList可以用作列表、隊列、棧、雙端隊列。

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

addFirst

雙向鏈表常規操作:

	public void addFirst(E e) {
    	linkFirst(e);
	}

    private void linkFirst(E e) {
        final Node<E> f = first;
        final Node<E> newNode = new Node<>(null, e, f);//創建新節點
        first = newNode;//頭指針
		
        if (f == null)
            last = newNode;
        else
            f.prev = newNode;
        size++;
        modCount++;
    }

removeFirst

也是常規操作:

    public E removeFirst() {
        final Node<E> f = first;
        if (f == null)
            throw new NoSuchElementException();
        return unlinkFirst(f);
    }

    private E unlinkFirst(Node<E> f) {
        // assert f == first && f != null;
        final E element = f.item;
        final Node<E> next = f.next;
        f.item = null;
        f.next = null; // help GC
        first = next;
        if (next == null)
            last = null;
        else
            next.prev = null;
        size--;
        modCount++;
        return element;
    }
發佈了31 篇原創文章 · 獲贊 13 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章