자바 성능 튜닝 이야기 Collection
알아보게 된 이유.
자바 성능 튜닝 이야기라는 책을 읽으며 자바의 성능을 올릴 수 있는 이야기들을 정리해보고 자 한다.
Collection
Collection : 가장 상위 인터페이스 Set : 중복을 허용하지 않는 집합을 처리하기 위한 인터페이스. SortedSet : 오름차순을 갖는 Set 인터페이스. List : 순서가 있는 집합을 처리하기 위한 인터페이스 , 인덱스가 있어 위치를 찾을 수 있다. Queue : 여러 개의 객체를 처리하기 전에 담아서 처리할 때 사용하기 위한 인터페이스. Map : Map은 키와 값의 쌍으로 구성된 객체의 집합을 처리하기 위한 인터페이스. SortedMap : 키를 오름차순으로 정렬하는 Map 인터페이스.
[Set 인터페이스를 구현한 클래스]
HashSet, TreeSet, LinkedHashSet 세가지가 있다.
HashSet : 데이터를 해쉬 테이블에 담는 클래스로 순서 없이 저장된다.
TreeSet : red-black 이라는 트리에 데이터를 담는다. 값에 따라서 순서가 정해진다. 데이터를 담으면서 동시에 정렬을 하기 때문에 HashSet보다 성능상 느리다.
[List 인터페스를 구현한 클래스]
Vactor : 객체 생성시에 크기를 지정할 필요가 없는 배열 클래스이다.
ArrayList : Vector와 비슷하지만, 동기화 처리가 되어 있지 않다.
LinkedList : ArrayList와 동일하지만, Queue 인터페이스를 구현했기 때문에 FIFO 큐 작업을 수행한다.
Map은 Key와 Value의 쌍으로 저장되는 구조체이다.
[Map 인터페이스를 구현한 클래스]
HashMap, TreeMap, LinkeHashMap
Hashtable : 데이터를 해쉬 테이블에 담는 클래스이다. 내부에서 관리하는 해쉬 테이블 객체가 동기화되어 있으므로, 동기화가 필요한 부분에서는 이 클래스를 사용.
HashMap : 데이터를 해쉬 테이블에 담는 클래스이다. Hashtable 클래스와 다른 점은 null 값을 허용한다는 것과 동기화되어 있지 않다는 것.
TreeMap : red-black 트리에 데이터를 담는다. TreeSet과 다른 점은 키에 의해서 순서가 정해진 것이다.
LinkedHashMap : HashMap과 거의 동일하며 이중연결리스트 라는 방식을 사용하여 데이터를 담는다는 점만 다름.
Set 클래스 중 가장 빠른건?
1000개의 데이터를 순차적으로 넣는 평균 응답 시간(마이크로초)
- HashSet : 375
- TreeSet : 1249
- LinkedHashSet : 378
데이터를 읽을 때 평균 응답 시간(마이크로초)
- HashSet : 26
- TreeSet : 35
- LinkedHashSet : 16
랜덤하게 데이터를 읽을 때 평균 응답 시간(마이크로초)
- HashSet : 32
- TreeSet : 841
- LinkedHashSet : 32
데이터를 순서에 따라 탐색하는 작업이 필요 할 때는 TreeSet을 사용하는 것이 좋다. 하지만, 그럴 필요가 없을 때는 HashSet이나 LinkedHashSet을 사용하는 것을 권장한다.
List 클래스 중 가장 빠른건?
1000개의 데이터를 순차적으로 넣는 평균 응답 시간(마이크로초)
- ArrayList : 28
- Vector : 31
- LinkedList : 40
데이터를 읽을 때 평균 응답 시간(마이크로초)
- ArrayList : 4
- Vector : 105
- LinkedList : 1512
ArrayList의 속도가 가장 빠르고, Vector와 LinkedList는 속도가 매우 느리다. LinkedList가 터무니 없이 느리게 나온 이유는 Queue 인터페이스를 상속받기 때문이다. LinkedList 클래스를 사용 할 때에는 get() 메서드가 아닌 peek()이나 poll()메서드를 사용해야한다.
Map 클래스 중 가장 빠른건?
HashMap, TreeMap, LinkeHashMap 의 데이터 추가 작업의 속도는 비슷하다. get()메서드를 사용하여 데이터를 꺼내는 시간 비교.
대부분의 클래스들이 동일하지만 Tree 형태로 처리하는 TreeMap 클래스가 가장느리다.
- Set : HashSet
- List : ArrayList
- Map : HashMap
- Queue : LinkedList