import java.util.*;

public class SpeedTest {

	public static long add( List list ) // 순차적인 삽입.
	{
		long start_time = System.currentTimeMillis();
		
		for (int i = 0 ; i<100000 ; i++)
		{
			list.add(i+"");
		}
		
		long end_time = System.currentTimeMillis();
		
		return end_time - start_time;
	}
	
	public static long add2( List list ) // 중간에 삽입
	{
		long start_time = System.currentTimeMillis();
		
		for (int i = 0 ; i<100000 ; i++)
		{
			list.add(1000 , "a"); // 100번째 에 삽입
		}
		
		long end_time = System.currentTimeMillis();
		
		return end_time - start_time;
	}
	
	public static long remove(List list)
	{
		long start_time = System.currentTimeMillis();
		
		for (int i = 0 ; i<100000 ; i++)
		{
			list.remove(500);
		}
		
		long end_time = System.currentTimeMillis();
		
		return end_time - start_time;
		
	}
	public static long remove2(List list)
	{
		long start_time = System.currentTimeMillis();
		
		for (int i = list.size()-1 ; i>0 ; i--)
		{
			list.remove(i);
		}
		
		long end_time = System.currentTimeMillis();
		
		return end_time - start_time;
		
	}
	public static long access(List list)
	{
		long start_time = System.currentTimeMillis();
		
		for (int i = 0; i<1000 ; i++)
		{
			list.get(i);
		}
		
		long end_time = System.currentTimeMillis();
		
		return end_time - start_time;
	}
	public static void main(String[] args)
	{
		
		ArrayList al = new ArrayList( 1000000 );	
		LinkedList ll = new LinkedList();
		
		
		
		System.out.println("순차적으로 삽입하는 시간");
		System.out.println("Arraylist " + add(al));
		System.out.println("LinkedList " + add(ll));
		//순차적일 경우는 arraylist 가 빠르다.
		
		
		System.out.println("중간에 추가하는 시간");
		System.out.println("Arraylist " + add2(al));
		System.out.println("LinkedList " + add2(ll));
		//중간에 추가할경우 LinkedList 가 빠르다 훨신!
		
		System.out.println("접근시간 테스트");
		System.out.println("Arraylist " + access(al));
		System.out.println("LinkedList " + access(ll));
		
		
		System.out.println("중간에서 삭제하기");
		System.out.println("Arraylist " + remove(al));
		System.out.println("LinkedList " + remove(ll));
		//중간에 삭제할경우 LinkedList 가 빠름
		
		
		System.out.println("순차적으로 삭제하기");
		System.out.println("Arraylist " + remove2(al));
		System.out.println("LinkedList " + remove2(ll));
		//순차적삭제는 Arraylist가 빠름

		

		
	}
}

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

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

3. 특정요소에 접근할 경우에는 Arraylist가 빠르다.

배열의 경우 n번째 요소에 접근할 경우 아래와 같은 수식으로 접근하기 때문에 빠르다.

n번째 요소의 주소 = 배열의 주소 + n * 데이터 타입의 크기.


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

컬렉션  (0) 2012.02.10
직렬화(Serialize)  (0) 2012.02.07
예외 처리 (Exception)  (0) 2012.01.11
Thread  (0) 2012.01.10
이클립스 단축키 (펌)  (0) 2011.03.23

+ Recent posts