반응형
여러가지 자료구조에 대한 비교를 해본다.
Array (배열)
- 같은 데이터 타입에 대해 데이터를 한 곳에 저장해두고 하나의 변수를 가지고 사용하는 것을 말한다.
- 1차원배열과 다차원 배열이 존재
- 장점
- 간단하게 사용 가능
- 인덱스 통해 빠르게 데이터 접근 가능
- 단점
- 저장 공간이 제한적
- 동적 할당을 통해 새롭게 정의 가능하지만 데이터 이동을 또 해야함
Iterable
- 이름 그대로 반복할 수 있는지 확인하는 인터페이스
- 다음과 같은 abstract method를 갖음
boolean hasNext () // 요소가 더 많은 경우 true를 반환합니다. E next () // 제네릭 타입 E의 다음 원소를 반환합니다. void remove () // 반복자가 반환 한 마지막 요소를 제거합니다. |
Collection
- 모든 콜렉션의 상위 인터페이스
- Collection이 갖는 핵심 메소드를 선언
- ex) add, contatin, remove, size, isEmpty, iterator 등
List
- Collection 인터페이스를 확장한 자료형
- 순서가 있음
- 인덱스가 존재
- 중복을 허용
Vector
Java 1.0 에서 추가
동기화 기능 제공
ArrayList와 거의 동일하지만 동기화 기능에서만 차이를 보임
ArrayList의 구현 버전
ArrayList
- Java 1.2 에서 추가
- 동기화 제공되지 않음
- 내부적으로 데이터를 배열에서 관리
- 데이터의 추가, 삭제를 위해 임시 배열을 생성해 데이터를 복사 하는 방법을 사용
- 패키지 : java.util
- 장점 : 검색이 빠름(각 데이터에 대한 인덱스를 가지고 있으므로)
- 단점 : 대량 데이터 추가/삭제시 느림 (배열의 복사가 빈번하게 발생)
CopyOnWriteArrayList
- ArrayList와 동일하지만 동기화 지원
- 동기화를 지원하므로 ArrayList에 비해서는 느림
- JDK 1.5에서 추가
- ArrayList는 CopyOnWriteArrayList가 수행 할 수없는 동안 ConcurrentModificationException을 발생
- package : java.util.concurrent
LinkedList
- Java 1.2 에서 추가
- 링크 기반 (데이터를 저장하는 각 노드가 이전 노드와 다음 노드의 상태를 알고 있는 형태)
- 장점 : 대량 데이터 추가/삭제가 빠름(위치 정보의 수정만으로 가능)
- 단점 : 데이터가 많은 경우 검색이 느림 (순차적으로 모든 노드를 조회해야 함)
Stack
LIFO(Last In First Out)구조로 구현된 리스트
스택
Set
- 중복을 허용하지 않음
HashSet
- 데이터를 해쉬 테이블에 담는 클래스
- 순서가 없음
LinkedHashSet
- 해쉬 테이블에 데이터를 담음
- 순서가 있음 : 저장된 순서
TreeSet
- red-black이라는 트리에 데이터를 담음
- 순서가 있음 : 값에 따라서 정해짐
- HashSet보다 성능상 느림
Queue
- FIFO(Firsh In First Out)구조로 구현된 리스트
PrioriryQueue
- 큐에 추가된 순서와 상관없이 먼저 생성한 객체가 먼저 나옴
LinkedBlockingQueue
- 선택적으로 저장할 데이터의 크기를 정할 수도 있는 FIFO 기반의 링크 노드를 사용
- 블로킹 큐
ArrayBlockingQueue
- 저장되는 데이터의 크기가 정해져 있는 FIFO 기반
- 블로킹 큐
PriorityBlockingQueue
- 저장되는 데이터의 크기가 정해져 있지 않음
- 객체의 생성 순서에 따라서 순서가 저장
- 블로킹 큐
DelayQueue
- 큐가 대기하는 시간을 지정하여 처리하도록 되어 있는 큐
SynchronousQueue
- put() 메소드를 호출하면, 다른 스레드에서 take() 메소드가 호출될 때까지 대기하도록 되어 있는 큐
- 저장되는 데이터가 없음
- API에서 제공하는 대부분의 메소드는 0이나 null을 리턴
Blocking Queue
크기가 지정되어 있는 큐에 공간이 더 이상 없을 때, 공간이 생길 때까지 대기하도록 만들어진 큐
Map
Key와 Value 쌍으로 저장되는 자료구조
Hashtable
- 데이터를 해쉬 테이블에 담는 클래스입니다.
- 내부에서 관리하는 해쉬 테이블 객체가 동기화되어 있음
- null 값을 허용하지 않음
HashMap
- 데이터를 해쉬 테이블에 담는 클래스
- null 값을 허용
- 동기화 되어 있지 않음
ConcurrentHashMap
- HashMap과 동일하지만 동기화 지원
- JDK 1.5에서 지원
- 동기화시 hashtable을 절체에 대해 lock을 걸지 않고 조각을 쪼개어 부분 부분 lock을 걸어 성능을 높임
- null 값을 허용하지 않음
- 동시성 처리를 위해서 null을 수용할 수 없음
TreeMap
- red-black 트리에 데이터를 담음
- 순서가 있음 : 키 값에 따라 정해짐
LinkedHashMap
- HashMap과 거의 동일
- 이중 연결 리스트(doubly-linkedlist)를 사용하여 데이터를 담음
- 순서가 있음 : 넣는 순서에 따라 정해짐
Reference
[1] The Collection Framework https://www.ntu.edu.sg/home/ehchua/programming/java/J5c_Collection.html
반응형
'Computer Science' 카테고리의 다른 글
JVM 메모리 구조 (JVM Memory structure) (0) | 2017.09.30 |
---|---|
DB 트랜잭션 (Transaction)의 ACID 속성과 분산시스템 BASE 속성 (0) | 2017.09.30 |
OOP(객체 지향 프로그래밍) 5원칙 및 특성 (0) | 2017.09.30 |
TCP vs UDP (0) | 2017.09.30 |
TCP 3 Way-Handshake & 4 Way-Handshake (0) | 2017.09.30 |
OSI 7 계층 (OSI 7 Layer) (0) | 2017.09.29 |
프로세스와 스레드(Process vs Thread) (0) | 2017.09.29 |
64비트와 32비트의 차이 (0) | 2017.09.29 |
퀵 정렬, 퀵 소트(Quick Sort) (0) | 2017.09.21 |
계수정렬, 카운팅 소트(Counting Sort) (0) | 2017.09.21 |