자바 기반 LinkedList
14311 단어 필기 하 다.
LinkedList 의 속성:
/ / 링크 의 헤더, 헤더 에 데이터 가 없습니다.Entry 는 링크 류 데이터 구조 입 니 다. 상세 한 내 역 은 뒤 를 보 세 요.
private transient Entry header = new Entry(null, null, null);
/ / LinkedList 의 요소 개수, 즉 현재 용량
private transient int size = 0;
LinkedList 노드 에 대응 하 는 데이터 구조
세 가지 속성 포함: 위의 노드, 다음 노드, 노드 값.
여기 서 알 수 있 듯 이 링크 드 리스트 는 양 방향 링크 로 앞 뒤 두 방향 으로 얻 을 수 있다.private static class Entry {
/ / 현재 노드 의 값
E element;
/ / 다음 노드
Entry next;
/ / 이전 노드
Entry previous;
/ / 노드 의 구조 함수.
Entry(E element, Entry next, Entry previous) {
this.element = element;
this.next = next;
this.previous = previous;
}
}
LinkedList 의 무 작위 접근
LinkedList 에서 지정 한 위치의 노드 를 가 져 옵 니 다. 매번 처음부터 끝까지 찾 습 니 다. 효율 이 가장 낮 습 니 다.따라서 이런 방식 을 사용 하지 말고 교체 기 나 for each 방식 을 사용 해 야 한다.
private Entry<E> entry(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException("Index: "+index+ ", Size: "+size);
Entry<E> e = header;
// index 。
// index 1/2,
if (index < (size >> 1)) {
for (int i = 0; i <= index; i++)
e = e.next;
} else {
// ,
for (int i = size; i > index; i--)
e = e.previous;
}
return e;
}
LinkedList 교체 기:
반복 시간 초기 화 교체 기 는 처음부터 끝까지 위 치 를 찾 은 후 매번 다음 것 만 조회 하면 됩 니 다.
private class ListItr implements ListIterator<E> {
// private Entry lastReturned = header;
//
private Entry<E> next;
//
private int nextIndex;
// 。 fail-fast 。 private int expectedModCount = modCount;
// 。
// index
ListItr(int index) {
// index
if (index < 0 || index > size) throw new IndexOutOfBoundsException("Index: "+index+ ", Size: "+size);
// index , ;
if (index < (size >> 1)) {
next = header.next; for (nextIndex=0; nextIndex<index; nextIndex++)
next = next.next;
} else {
// ,
next = header; for (nextIndex=size; nextIndex>index; nextIndex--)
next = next.previous;
}
}
// fail-fast , 。
final void checkForComodification() { if (modCount != expectedModCount) throw new ConcurrentModificationException();
}
}
linkedList 의 직렬 화 와 반 직렬 화:
먼저 용량 을 쓰 고 구체 적 인 값 을 쓴다.먼저 용량 을 읽 은 다음 에 각 구체 적 인 값 을 읽는다.
// LinkedList ,
private void writeObject(java.io.ObjectOutputStream s)
throws java.io.IOException {
s.defaultWriteObject();
//
s.writeInt(size);
// for (Entry e = header.next; e != header; e = e.next)
s.writeObject(e.element);
}
private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException {
s.defaultReadObject();
//
int size = s.readInt();
//
header = new Entry<E>(null, null, null);
header.next = header.previous = header;
// “ ”
for (int i=0; i<size; i++) addBefore((E)s.readObject(), header);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Dubbo (2): zookeeper 등록 센터Zookeeper 는 Apacahe Hadoop 의 하위 프로젝트 로 트 리 형태의 디 렉 터 리 서비스 로 푸 시 변경 을 지원 하 며 Dubbo 서비스의 등록 센터 로 적합 하 며 산업 강도 가 높 아 생산 환경...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.