02-LinkedList
약술 하 다
2.1 속성
//
transient Node<E> first;
//
transient Node<E> last;
2.2 데이터 구조
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;
}
}
2.3 구조 방법
public LinkedList() {
}
3. 중요 한 방법
3.1 요소 추가
3.1.1 add 추가
public boolean add(E e) {
linkLast(e);
return true;
}
void linkLast(E e) {
final Node<E> l = last;
//1. , last
final Node<E> newNode = new Node<>(l, e, null);
last = newNode;
//2. null,
if (l == null)
first = newNode;
//3. ,
else
l.next = newNode;
size++;
modCount++;
}
3.1.2 머리 추가
public void addFirst(E e) {
linkFirst(e);
}
private void linkFirst(E e) {
final Node<E> f = first;
//1. ,
final Node<E> newNode = new Node<>(null, e, f);
first = newNode;
//2. null,
if (f == null)
last = newNode;
else
//3. null,
f.prev = newNode;
size++;
modCount++;
}
3.1.3 꼬리 부분 추가
public void addLast(E e) {
linkLast(e);
}
3.1.4 지정 위치 추가
public void add(int index, E element) {
//1. , 0 size
checkPositionIndex(index);
//2. ,
if (index == size)
linkLast(element);
//3. , ,node index
else
linkBefore(element, node(index));
}
void linkBefore(E e, Node<E> succ) {
final Node<E> pred = succ.prev;
//1. ,
final Node<E> newNode = new Node<>(pred, e, succ);
//2.succ
succ.prev = newNode;
//3. , null,
if (pred == null)
first = newNode;
else
pred.next = newNode;
size++;
modCount++;
}
void linkLast(E e) {
final Node l = last;
final Node newNode = new Node<>(l, e, null);
last = newNode;
if (l == null)
first = newNode;
else
l.next = newNode;
size++;
modCount++;
}
3.2 요소 삭제
3.2.1 지 정 된 위치 제거
public E remove(int index) {
checkElementIndex(index);
return unlink(node(index));
}
3.2.2 두미 제거
public E removeFirst() {
final Node<E> f = first;
if (f == null)
throw new NoSuchElementException();
return unlinkFirst(f);
}
3.2.3 끝부분 제거
public E removeLast() {
final Node<E> l = last;
if (l == null)
throw new NoSuchElementException();
return unlinkLast(l);
}
3.2.4 지정 값 제거
public boolean remove(Object o) {
if (o == null) {
for (Node<E> x = first; x != null; x = x.next) {
if (x.item == null) {
unlink(x);
return true;
}
}
} else {
for (Node<E> x = first; x != null; x = x.next) {
if (o.equals(x.item)) {
unlink(x);
return true;
}
}
}
return false;
}
3.3 수정 요소
public E set(int index, E element) {
checkElementIndex(index);
Node<E> x = node(index);
E oldVal = x.item;
x.item = element;
return oldVal;
}
3.4 조회 요소
3.4.1 드 롭 다운 획득
public E get(int index) {
checkElementIndex(index);
return node(index).item;
}
Node<E> node(int index) {
// assert isElementIndex(index);
if (index < (size >> 1)) {
Node<E> x = first;
for (int i = 0; i < index; i++)
x = x.next;
return x;
} else {
Node<E> x = last;
for (int i = size - 1; i > index; i--)
x = x.prev;
return x;
}
}
3.4.2 머리 획득
public E getFirst() {
final Node<E> f = first;
if (f == null)
throw new NoSuchElementException();
return f.item;
}
3.4.3 꼬리 획득
public E getLast() {
final Node<E> l = last;
if (l == null)
throw new NoSuchElementException();
return l.item;
}
3.4.4 값 에 따라 획득
public int indexOf(Object o) {
int index = 0;
if (o == null) {
for (Node<E> x = first; x != null; x = x.next) {
if (x.item == null)
return index;
index++;
}
} else {
for (Node<E> x = first; x != null; x = x.next) {
if (o.equals(x.item))
return index;
index++;
}
}
return -1;
}
3.5 대기 열 조작
public E peek() {
final Node<E> f = first;
return (f == null) ? null : f.item;
}
public E element() {
return getFirst();
}
public E poll() {
final Node<E> f = first;
return (f == null) ? null : unlinkFirst(f);
}
public E remove() {
return removeFirst();
}
4. Array List 와 LinkedList 비교
4.1 기본 대비
대비 차원
ArrayList
LinkedList
데이터 구조
배열
체인 테이블
공간 효율
노드 는 낭 비 를 보지 못 했 지만 확장 은 공간 낭비 가 있 을 수 있다.
각 노드 마다 추가 포인터 필드 가 필요 합 니 다.
우세 하 다.
임 의 접근
머리 삽입, 다른 성능 은 ArrayList 에 비해 차지 하지 않 습 니 다. 대기 열 지원 Api
기본 용량
10
없다
용량 을 늘리다
1.5 배
확장 할 필요 가 없다.
4.2 성능 대비
데이터 양 \ 삽입 위치
머리 부분
가운데
끝부분
무 작위
백.
효율 이 일정 하 다.
효율 이 일정 하 다.
효율 이 일정 하 다.
효율 이 일정 하 다.
천.
LinkedList 삽입 속도
효율 이 일정 하 다.
효율 이 일정 하 다.
ArrayList 삽입 속도
만.
LinkedList 삽입 속도
ArrayList 삽입 속도
효율 이 일정 하 다.
ArrayList 삽입 속도
십 만
LinkedList 삽입 속도
ArrayList 삽입 속도
ArrayList 삽입 속도
ArrayList 삽입 속도
백만
LinkedList 삽입 속도
ArrayList 삽입 속도
ArrayList 삽입 속도
ArrayList 삽입 속도
소결
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails Turbolinks를 페이지 단위로 비활성화하는 방법원래 Turobolinks란? Turbolinks는 링크를 생성하는 요소인 a 요소의 클릭을 후크로 하고, 이동한 페이지를 Ajax에서 가져옵니다. 그 후, 취득 페이지의 데이터가 천이 전의 페이지와 동일한 것이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.