1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | 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 * 데이터 타입의 크기.
'프로그래밍 > java' 카테고리의 다른 글
URLConnection 사용하기(웹호출) (0) | 2014.06.22 |
---|---|
java.lang패키지의 Object클래스에 대해(메소드) (0) | 2014.06.15 |
HashMap, ArrayList, LinkedList 속도 비교 (0) | 2014.06.13 |
LinkedList 와 ArrayList의 차이 (0) | 2014.06.09 |
Java synchronized (0) | 2014.06.06 |