본문 바로가기

Java/본격 Java 컬렉션

[Java] LinkedList

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  느림    빠름  데이터가 많을수록 접근성이 떨어짐


 

728x90
반응형

'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