>  기사  >  Java  >  ArrayList에 있는 몇 가지 일반적인 메서드의 소스 코드를 공유합니다.

ArrayList에 있는 몇 가지 일반적인 메서드의 소스 코드를 공유합니다.

零下一度
零下一度원래의
2017-06-28 09:41:471761검색

ㅋㅋㅋ

LinkedList의 일반적인 방법에 대한 간략한 분석입니다.  LinkedList는 연결리스트를 기반으로 구현되었습니다. 즉, 느린 랜덤 액세스와 빠른 삽입 및 삭제 속도 등 연결리스트의 장점과 단점을 모두 가지고 있습니다. Linked List이기 때문에 노드 데이터 구조를 갖고 있으며, 마지막에 하나만 추가하면 되기 때문에 용량에는 문제가 없습니다.

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

 기본적으로 매개변수가 없는 첫 번째 생성자는 빈 연결 리스트를 구성합니다.

//1.LinkedList,默认构造方法public LinkedList() {
}
 두 번째 생성자는 컬렉션을 매개 변수로 전달할 수 있으며 컬렉션의 요소는 LinkedList의 하위 클래스여야 합니다.

//2.LinkedList,能将一个集合作为参数的构造方法public LinkedList(Collection<? extends E> c) {this();
    addAll(c);
}

 두 구성 방법 모두 비교적 간단합니다. 다음으로 요소의 삽입과 삭제를 살펴보겠습니다.

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,防止一个线程在用迭代器遍历的时候,另一个线程在对其进行修改。}

"데이터 구조"를 공부한 학생들은 연결리스트의 연산이 낯설지 않을 것이라고 믿습니다. 지정된 위치의 요소를 삭제하는
remove(int)

메소드를 살펴보겠습니다. .

//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

위치에서 Node를 찾은 후

unlink

메소드를 호출하여 노드
를 제거합니다.

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

ArrayList의 장단점을 코드에서 확인할 수 있습니다. 단순 연결리스트 데이터 구조만 포함되어 있으므로 다른 메소드는 파싱되지 않습니다.

위 내용은 ArrayList에 있는 몇 가지 일반적인 메서드의 소스 코드를 공유합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.