본문 바로가기

Backend/Java

ArrayList와 LinkedList와 처리 시간 비교

순차적으로 추가/삭제 시

  • ArrayList가 LinkedList 보다 빠름
  • ArrayList가 용량이 충분하면 더 빠름
  • ArrayList 용량이 충분하지 않으면 새로운 크기의 ArrayList를 생성하고 데이터를 복사하는 과정 발생 -> 순차적으로 데이터를 추가해도 ArrayList가 더 느릴 수 있음 -> 충분한 용량 확보 중요
  • 순차적으로 삭제 시 마지막 데이터부터 역순으로 삭제해 나가면 각 요소들을 재배치할 필요가 없기 때문에 더 빠름

중간 데이터를 추가/삭제 시

  • LinkedList는 연렬(링크)만 변경해주면 됨 -> 처리 속도 상당히 빠름
  • ArrayList는 삭제 후 각 요소들을 재배치 -> 처리 속도 늦음

예제를 통해 확인 가능

package list;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

// ArrayList와 LinkedList의 처리 시간 비교
public class ex01 {
	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("LinkedList : " + add1(ll));
		System.out.println();
		//순차적으로 추가하기
		//ArrayList : 90
		//LinkedList : 210

		System.out.println("중간에 추가하기");
		System.out.println("ArrayList : " + add2(al));
		System.out.println("LinkedList : " + add2(ll));
		System.out.println();
		//중간에 추가하기
		//ArrayList : 2009
		//LinkedList : 11
		
		System.out.println("중간에서 삭제하기");
		System.out.println("ArrayList : " + remove2(al));
		System.out.println("LinkedList : " + remove2(ll));
		System.out.println();
		//중간에서 삭제하기
		//ArrayList : 1310
		//LinkedList : 110
		
		System.out.println("순차적으로 삭제하기");
		System.out.println("ArrayList : " + remove1(al));
		System.out.println("LinkedList : " + remove1(ll));
		System.out.println();
		//순차적으로 삭제하기
		//ArrayList : 7
		//LinkedList : 29
		
	}
	
	// 순차적으로 추가
	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<10000; 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;
	}
	
	//중간 데이터 삭제하기
	// 처음 0 삭제, 이동. 1삭제, 이동, 2삭제, ...
	public static long remove2(List list) {
		long start = System.currentTimeMillis();
		
		for(int i=0; i<10000; i++)
			list.remove(i);
		
		long end = System.currentTimeMillis();
		
		return end - start;
	}
}

'Backend > Java' 카테고리의 다른 글

Set  (0) 2021.11.30
this  (0) 2021.11.30
LinkedList  (0) 2021.11.30
ArrayList에 DTO 객체 저장  (0) 2021.11.30
컬렉션 프레임워크(Collection Framework)  (0) 2021.11.30