LinkedList<E> 클래스
- 사용하는 데이터의 개수가 자주 변경되는 경우 ArrayList보다 효율적인 동작을 합니다.
단, 데이터의 개수가 많으면 접근시간이 오래 걸립니다.
- 생성자
LinkedList() : LinkedList 생성
LinkedList(Collection<? extends E> c) : 지정된 컬렉션(c)를 기반으로 LinkedList를 생성
- 주요 메소드 : Collection과 List 인터페이스에서 상속받은 메소드는 제외
리턴 / 메소드명 및 설명
void / addFirst(E e) : 지정된 객체(e)를 List의 첫번째 요소로 추가
void / addLast(E e) : 지정된 객체(e)를 List의 마지막 요소로 추가
Iterator<E> / descendingInterator() : 역순으로 조회하는 iterator리턴
E / element() : List의 첫번째 요소 리턴
E / getFirst() : List의 첫번째 요소 리턴
E / getLast() : List의 마지막 요소 리턴
boolean / offer(E e) : 지정된 객체(e)를 List의 마지막 요소로 추가
boolean / offerFirst(E e) : 지정된 객체(e)를 List의 첫번째 요소로 추가
boolean / offerLast(E e) : 지정된 객체(e)를 List의 마지막 요소로 추가
E / peek() : List의 첫번째 요소를 리턴
E / peekFirst() : List의 첫번째 요소를 리턴
E / peekLast() : List의 마지막 요소를 리턴
E / poll() : List의 첫번째 요소를 리턴(List에서는 삭제됨)
E / pollFirst() : List의 첫번째 요소를 리턴(List에서는 삭제됨)
E / pollLast() : List의 마지막 요소를 리턴(List에서는 삭제됨)
E / pop() : removeFirst()와 동일
void / push(E e) : addFirst()와 동일
.
.
중간에 있는 자주 변경할 경우에는 LinkedList<E>를 사용하는 것이 효율적이다.
import java.util.*;
class LinkedListEx1{
public static void main(String[] args) {
ArrayList al = new ArrayList(2000000);
LinkedList ll = new LinkedList();
System.out.println("= 순차적으로 추가하기 =");
System.out.println("ArrayList : " + add1(al)); // 빠름
System.out.println("LinkenList : " + add1(ll)); // 느림
System.out.println();
System.out.println("= 중간에 추가하기 =");
System.out.println("ArrayList : " + add2(al)); // 느림
System.out.println("LinkenList : " + add2(ll)); // 빠름
System.out.println();
System.out.println("= 중간에서 삭제하기 =");
System.out.println("ArrayList : " + remove2(al)); // 느림
System.out.println("LinkenList : " + remove2(ll)); // 빠름
System.out.println();
System.out.println("= 순차적으로 삭제하기 =");
System.out.println("ArrayList : " + remove1(al)); // 빠름
System.out.println("LinkenList : " + remove1(ll)); // 느림
System.out.println();
}
public static long add1(List list){
long start = System.currentTimeMillis();
for (int i = 0 ; i < 1000000 ; i++){
list.add(i + "");
}
long end = System.currentTimeMillis();
return end - start;
}
public static long add2(List list){
long start = System.currentTimeMillis();
for (int i = 0 ; i < 1000 ; i++){
list.add(500, "X");
}
long end = System.currentTimeMillis();
return end - start;
}
public static long remove1(List list){
long start = System.currentTimeMillis();
for (int i = list.size() - 1 ; i >= 0 ; i--){
list.remove(i);
}
long end = System.currentTimeMillis();
return end - start;
}
public static long remove2(List list){
long start = System.currentTimeMillis();
for (int i = 0 ; i < 1000 ; i++){
list.remove(i);
}
long end = System.currentTimeMillis();
return end - start;
}
}
/*
읽기(접근시간) 추가/삭제
ArrayList 빠름 느림 순차적인 추가/삭제는 더 빠름(메모리효율 X)
LinkedList 느림 빠름 데이터가 많을수록 접근성이 떨어짐
*/
.
.
읽기(접근시간) | 추가/삭제 | ||
ArrayList | 빠름 | 느림 | 순차적인 추가/삭제는 더 빠름(메모리효율 X) |
LinkedList | 느림 | 빠름 | 데이터가 많을수록 접근성이 떨어짐 |
'Java > 본격 Java 컬렉션' 카테고리의 다른 글
[Java] Iterator<E> (0) | 2020.07.03 |
---|---|
[Java] Stack - Queue (0) | 2020.07.03 |
[Java] ArrayList (0) | 2020.07.03 |
[Java] 컬렉션 프레임워크(Collection Framework) (0) | 2020.07.03 |
[Java] 제네릭(Generic) 심화 (0) | 2020.07.03 |