Heim  >  Artikel  >  Java  >  Teilen Sie den Quellcode mehrerer gängiger Methoden in ArrayList

Teilen Sie den Quellcode mehrerer gängiger Methoden in ArrayList

零下一度
零下一度Original
2017-06-28 09:41:471761Durchsuche

jdk1.7.0_79

Das Obige erklärt die relevanten ArrayList - „Quellcode-Analyse gängiger Methoden in ArrayList“ . In diesem Artikel werden die gängigen Methoden von LinkedList kurz beschrieben Analysieren .

LinkedList

wird basierend auf einer verknüpften Liste implementiert, was bedeutet, dass es die Vor- und Nachteile einer verknüpften Liste aufweist, einschließlich langsamem Direktzugriff und schnellem Einfügen und Löschen. Da es sich um eine verknüpfte Liste handelt, verfügt sie über eine Knotendatenstruktur und es gibt kein Kapazitätsproblem. Fügen Sie einfach einen am Ende hinzu.

//LinkedList$Nodeprivate 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;
    }
}
Der erste Konstruktor, der standardmäßig keine Parameter akzeptiert, erstellt eine leere verknüpfte Liste.

//1.LinkedList,默认构造方法public LinkedList() {
}
Der zweite Konstruktor kann eine Sammlung als Parameter übergeben, und die Elemente in der Sammlung müssen eine Unterklasse von

LinkedList.

//2.LinkedList,能将一个集合作为参数的构造方法public LinkedList(Collection<? extends E> c) {this();
    addAll(c);
}
Beide Konstruktionsmethoden sind relativ einfach. Schauen wir uns als Nächstes das Einfügen und Löschen von Elementen an.

public boolean add(E e) {
    linkLast(e);    //将元素添加到链表尾部return true;
}
//LinkedList#linkLastvoid linkLast(E e) {final Node<E> l = last;    //链表尾指针引用暂存final Node<E> newNode = new Node<>(l, e, null);    //构造新节点last = newNode;    //将链表的尾指针指向新节点if (l == null)    //此时为第一次插入元素first = newNode;elsel.next = newNode;    
    size++;    //链表数据总数+1modCount++;    //modCount变量在《有关ArrayList常用方法的源码解析》提到过,增删都会+1,防止一个线程在用迭代器遍历的时候,另一个线程在对其进行修改。}
Studenten, die „Datenstruktur“ studiert haben, glauben, dass die Funktionsweise verknüpfter Listen nicht unbekannt sein wird. Werfen wir einen Blick auf das Löschen die angegebene Position. Element
remove(int)

Methode.

//LinkedList#removepublic E remove(int index) {
    checkElementIndex(index);    //检查是否越界 index >= 0 && index <= sizereturn unlink(node(index));    //调用node方法查找并返回指定索引位置的Node节点}

//LinkedList#node,根据索引位置返回Node节点Node<E> node(int index) {if (index < (size >> 1)) {    //size >> 1 = size / 2,如果索引位于链表前半部分,则移动fisrt头指针进行查找Node<E> x = first;for (int i = 0; i < index; i++)
            x = x.next;return x;
    } else {    //如果索引位于链表后半部分,则移动last尾指针进行查找Node<E> x = last;for (int i = size - 1; i > index; i--)
            x = x.prev;return x;
    }
}
Index finden

Rufen Sie nach Node die Methode unlink auf, um den Knoten zu entfernen.

//LinkedList#unlink,一看即懂E unlink(Node<E> x) {// assert x != null;final E element = x.item;final Node<E> next = x.next;final Node<E> prev = x.prev;if (prev == null) {
        first = next;
    } else {
        prev.next = next;
        x.prev = null;
    }if (next == null) {
        last = prev;
    } else {
        next.prev = prev;
        x.next = null;
    }

    x.item = null;
    size--;
    modCount++;return element;
}
Sie können dem Code die Vorteile von
LinkedList

und ArrayListNachteil Da es sich nur um eine einfache Datenstruktur einer verknüpften Liste handelt, werden andere Methoden nicht analysiert.

Das obige ist der detaillierte Inhalt vonTeilen Sie den Quellcode mehrerer gängiger Methoden in ArrayList. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn