본문 바로가기
Language/Java

자바 ArrayList, LinkedList 차이 예제로 알아보기

by wakestand 2019. 11. 19.
반응형
	public static void main(String[] args) {
		ArrayList arrayList = new ArrayList();
		LinkedList linkedList = new LinkedList();
		
		// ArrayList add
		long startTime = System.nanoTime();
		for (int i = 0; i < 100000; i++) {
		arrayList.add(i);
		}
		long endTime = System.nanoTime();
		long duration = endTime - startTime;
		System.out.println("ArrayList add:  " + duration);
		// LinkedList add
		startTime = System.nanoTime();
		for (int i = 0; i < 100000; i++) {
		linkedList.add(i);
		}
		endTime = System.nanoTime();
		duration = endTime - startTime;
		System.out.println("LinkedList add: " + duration);
		
		// ArrayList get
		startTime = System.nanoTime();
		for (int i = 0; i < 10000; i++) {
		arrayList.get(i);
		}
		endTime = System.nanoTime();
		duration = endTime - startTime;
		System.out.println("ArrayList get:  " + duration);
		// LinkedList get
		startTime = System.nanoTime();
		for (int i = 0; i < 10000; i++) {
		linkedList.get(i);
		}
		endTime = System.nanoTime();
		duration = endTime - startTime;
		System.out.println("LinkedList get: " + duration);
		
		// ArrayList remove
		startTime = System.nanoTime();
		for (int i = 9999; i >=0; i--) {
		arrayList.remove(i);
		}
		endTime = System.nanoTime();
		duration = endTime - startTime;
		System.out.println("ArrayList remove:  " + duration);
		// LinkedList remove
		startTime = System.nanoTime();
		for (int i = 9999; i >=0; i--) {
		linkedList.remove(i);
		}
		endTime = System.nanoTime();
		duration = endTime - startTime;
		System.out.println("LinkedList remove: " + duration);

	}

 

위 코드는 자바의 ArrayList와 LinkedList로 

0부터 10만까지 삽입, 0부터 1만까지 값 호출,

마지막으로 9999부터 0까지 list 값을 삭제하는 코드인데 

실제 실행해 보면

 

ArrayList는 값을 가져오는 get() 메소드를 수행 시 LinekdList보다 훨씬 빠르며

LinkedList는 값을 추가하거나 삭제하는 add(), remove() 메소드 수행 시 ArrayList보다 훨씬 빠르다

 

이제 왜 이러는지에 대해 알아보면 

 

ArrayList는 배열과 같은 구조기 때문에 특정 값을 가져올 때에는

배열을 쭉 지나가면 되므로 매우 빠르다

 

반면 값을 추가하거나 삭제할 때에는

특정 값을 지우고 뒤의 값을 모두 한칸씩 땡겨오거나

특정 값을 추가하고 뒤의 값을 모두 한칸씩 미는 식으로 진행하기 때문에

대량의 추가/삭제에 있어서 매우 느리다

 

LinkedList는 내 전 배열 인덱스의 값과 다음 배열 인덱스의 값만 알고있기 때문에

추가 삭제시에는 ArrayList보다 훨씬 빠르다

다만 이렇게 하나하나 찾아가는 구조기 때문에 대량검색 시에는 ArrayList보다 훨씬 느리다

 

결론으로 돌아가보자면

ArrayList는 검색이 LinkedList보다 훨씬 빠르므로 대량의 데이터를 넣어놓고 검색할 때 주로 사용한다

LinkedList는 삽입, 삭제가 ArrayList보다 훨씬 빠르므로 대량의 데이터를 삽입, 삭제할 때 주로 사용한다

반응형

댓글