판봉 개발 일기

List 컬렉션중 하나인 LinkedList에 대하여 알아보자 본문

자바 복습

List 컬렉션중 하나인 LinkedList에 대하여 알아보자

판봉 2021. 7. 13. 15:47
728x90

LinkedList는 List의 구현 클래스로 ArrayList와 사용방법은 같지만 내부구조는 완전히 다르다.

 

ArrayList는 내부 배열에 객체를 저장하지만, LinkedList는 인접 참조를 이용한다.

 

LinkedList에서 특정 인덱스의 객체를 제거하면 앞뒤 링크만 변경되고 나머지 링크는 변경되지 않는다.

이것은 삽입할 때도 마찬가지이다.

 

LinkedList는 빈번한 객체 삭제와 삽입이 일어나는 곳에서는 좋은 성능을 발휘한다.

 

다음은 LinkedList를 생성하는법에 대하여 설명한다.

List<E> list = new LinkedList<E>();
List<E> list = new LinkedList<>();

다음은 ArrayList와 LinkedList의 실행 성능을 비교하기 위해 List 인터페이스의 add메소드를 이용한 예제이다.

import java.util.*;

public class LinkedListExample {
	public static void main(String[] args) {
    	List<String> list1 = new ArrayList<String>();
        List<String> list2 = new ArrayList<String>();
        
        long startTime;
        long endTime;
        
        startTime = System.nanoTime();
        for(int i = 0; i<10000; i++) {
        	list1.add(0, String.valueof(i));
        }
        endTime = System.nanoTime();
        System.out.println("ArrayList 걸린시간: " + (endTime-startTime) + " ns");
        
        startTime = System.nanoTime();
        for(int i = 0; i<10000; i++) {
        	list2.add(0, String.valueof(i));
        }
        endTime = System.nanoTime();
        System.out.println("LinkedList 걸린시간: " + (endTime-startTime) + " ns");
    }
}

※여기서 nanoTime();이란 시간을 재는데에 있어서 시작과 종료를 같이 의미할 수 있으며

valueof() 는 값의 데이터를 문자열로 바꾸어지는 메소드이다.

 

예제를 실행시켜보면 LinkedList가 ArrayList에 비해 더 빠른것을 알 수 있다.

그 이유는 ArrayList는 뒤의 남은 인덱스들을 모두 1씩 증가 또는 감소를 시켜야 하기때문에

시간이 더욱 더 많이 필요하다.

 

표로 나타내면 이렇게 나타낼 수 있겠다.

구분 순차적으로 추가및삭제 중간에 추가및삭제 검색
ArrayList 빠름 느림 빠름
LinkedList 느림 빠름 느림

얼핏 보면 "ArrayList가 LinkedList보다 더 좋은게 아니냐!" 라고 말할 수도 있겠지만

그것은 아니다.

상황에 맞게 적재 적소에 잘 써야 하는 것이 중요하다.

'자바 복습' 카테고리의 다른 글

Set 컬렉션중 하나인 HashSet에 대하여 알아보자  (0) 2021.07.13
Set 컬렉션에 대하여 알아보자  (0) 2021.07.13
List 컬렉션중 하나인 Vector에 대하여  (0) 2021.07.13
ArrayList  (2) 2021.07.12
List 컬렉션  (0) 2021.07.12