자바

컬렉션 프레임워크 - LinkedList

망재이 2023. 1. 26. 21:45
  • 배열을 이용하게 되면 구조가 간단하고 사용하기 쉬우며 데이터를 불러오는데 걸리는 시간이 가장 빠르다는 장점이 있다.
  • 하지만 큰 단점도 있다.
  • 크기를 변경할 수 없다. - 크기를 바꾸려면 새로운 배열을 생성해서 데이터를 복사해야 한다.
  • 비순차적인 데이터의 추가 또는 삭제에 시간이 많이 걸린다. 

=====> 단점을 보안하고자 나온게 LinkedList!

  • List인터페이스를 구현했기 때문에 ArrayList와 내부구현방법만 다를뿐 메소드의 종류와 기능은 거의 같다.
  • 둘의 성능차이를 예제를 통해서 확인해보자
package collection;

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

public class Ex_02_LinkedList
{

	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;
	}
	
	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;
	}
	
	
	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("ArrayList : "+add1(ll));
        //arraylist가 걸리는 시간이 더 짧다.
		System.out.println();
		System.out.println("ArrayList : "+add2(al));
		System.out.println("ArrayList : "+add2(ll));
        //linkedlist가 걸리는 시간이 더 짧다.
		System.out.println();
		System.out.println("ArrayList : "+remove1(al));
		System.out.println("ArrayList : "+remove2(ll));
        //linkedlist가 걸리는 시간이 더 짧다.
		System.out.println();
		System.out.println("ArrayList : "+remove2(al));
		System.out.println("ArrayList : "+remove2(ll));
        //arraylist가 걸리는 시간이 더 짧다.
	}

}

※ 결론 ※

순차적으로 추가/삭제하는 경우에는 ArrayList가 LinkedList보다 빠르다.

중간 데이터를 추가/삭제하는 경우에는 LinkedList가 ArrayList보다 빠르다.

728x90