[ JCF ]
- Java Collection Framework
- Collection - 데이터의 집합
- Framework - 표준화 체계(틀, 체제, 뼈대, 개발환경)
- Collection Framework - 다수의 데이터 집합을 관리(저장, 검색, 수정, 삭제 등)하는 표준화된 체계
[ 컬렉션 클래스 ]
- collection class
- 컬렉션 프레임워크에 속하는 인터페이스를 구현한 클래스
▶ 컬렉션 인터페이스 특징
| 인터페이스 | 특징 | 구현 클래스 |
| List<E> | 순서 O, 중복허용 O | ArrayList, Vector, LinkedList, Stack, Queue |
| Set<E> | 순서 X, 중복허용 X | HashSet, TreeSet |
| Map<K,V> | 순서 X, 중복허용 ( key - X , value - O ) | HashMap, TreeMap, Hashtable, Properties |
▬ List <E>
- 순서 O, 중복허용 O
- ArrayList, LinkedList, Vector, Stack 순서로 가장 많이 사용됨
- ArrayList, Vector는 거의 동일하나, ArrayList는 Thread에 안전하지 않고, Vector는 Thread에 안전함
(Thread에 안전하지 않다는 것은 여러 명이 동시에 접근하여 값을 변경할 때 문제가 생긴다는 것임)
- ArrayList
- 단방향 포인터 구조로 각 데이터에 대한 인덱스를 가지고 있어 조회 기능에 성능이 뛰어나다.
- 검색이 빠르다. 순차적으로 데이터가 추가된다면 빠르다.
- 하지만 List들의 중간중간 데이터에 빈번한 추가 삭제가 일어난다면 느리다.
- List 컬렉션을 여러 스레드에서 공유해야 한다면 Thread safe 하지 않다.
- LinkedList
- 양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 데이터의 위치정보만 수정하면 되기에 좋은 성능을 발휘한다.
- 하지만 검색이 느리다.
- 스택, 큐, 양방향 큐 등을 만들기 위한 용도로 쓰임
- 단방향 환형 LinkedList : 앞의 노드의 주소를 뒤의 노드가 가지고 있는 LinkedList
- 양방향(double) 환형 LinkedList : 한 노드가 앞의 노드와 뒤의 노드의 주소를 가지고 있는 LinkedList
- 환형 LinkedList : 제일 뒤의 노드가 제일 앞의 노드의 주소를 가지는 경우
- Vector
- 과거에 대용량 처리를 위해 사용했고, 내부에서 자동으로 동기화 처리가 일어나 비교적 성능이 좋지 않고 무거워 최근에는 잘 쓰이지 않는다
- ArrayList와 내부 구조는 동일하지만 Thread safe 하다.
- Stack
- LIFO 구조 ( Last In First Out )
────────────┐
→ C B A │
────────────┘
→ push()
← pop() peek()
empty()
index search()
- 스택 활용 : 웹브라우저 뒤로/앞으로
▬ Queue <E>
[ 큐(Queue) ]
1. FIFO (First In First Out)
────────────
→ C B A →
────────────
queue : offer() poll(), peek()
stack : push() pop(), peek()
- PriorityQueue
- 우선순위가 높은 것부터 꺼내오는 큐
- 내부구조가 힙으로 구성되어 있기에 시간 복잡도는 O(NLogN)임
[ 데큐(Dque) ]
1. Double Queue
────────────
→ →
C B A
← ←
────────────
▬ Set <E>
- 순서 X, 중복허용 X
- 순서를 유지하되 중복허용이 되지 않는 클래스 → LinkedHashSet
- HashSet
- 가장 빠른 임의 접근 속도
- 순서를 예측할 수 없다.
- Thread safe 하지 않다.
- TreeSet
- 정렬방법을 지정할 수 있다. (기본은 오름차순 정렬)
- Thread safe 하지 않다.
- LinkedHashSet
- 입력된 순서대로 저장한다.
- Thread safe 하지 않다.
▬ Map <K, V>
- 순서 X, 중복허용 ( key - X , value - O )
- Key와 Value로 이루어진 데이터 집합
- Hashtable
- HashMap보다는 느리지만 동기화 지원
- null불가
- Thread safe 하다.
- HashMap
- 중복과 순서가 허용되지 않으며 null값이 올 수 있다.
- 대부분 HashMap 객체를 생성할 때에는 매개 변수가 없는 생성자를 사용한다. 하지만 HashMap에 담을 데이터의 개수가 많은 경우에는 초기 크기를 지정해주는 것을 권장한다.
- TreeMap
- 키와 값을 저장하는 동시에 키를 정렬한다.
- 키(key)가 정렬되어 저장되기 때문에 검색 시 빠르다.
- 오름차순으로 정렬되며, 정렬되는 순서는 숫자 > 알파벳 대문자 > 알파벳 소문자 > 한글 순이다.
- 정렬을 해야 할 필요가 있다면 HashMap 보다는 TreeMap을 사용하는 것이 더 유리하다.

▶ 컬렉션클래스 주요 메서드
| 메서드 | 설명 |
| boolean add(E e) | 해당 컬렉션(collection)에 전달된 요소를 추가함. (선택적 기능) |
| void clear() | 해당 컬렉션의 모든 요소를 제거함. (선택적 기능) |
| boolean contains(Object o) | 해당 컬렉션이 전달된 객체를 포함하고 있는지를 확인함. |
| boolean equals(Object o) | 해당 컬렉션과 전달된 객체가 같은지를 확인함. |
| boolean isEmpty() | 해당 컬렉션이 비어있는지를 확인함. |
| Iterator<E> iterator() | 해당 컬렉션의 반복자(iterator)를 반환함. |
| boolean remove(Object o) | 해당 컬렉션에서 전달된 객체를 제거함. (선택적 기능) |
| int size() | 해당 컬렉션의 요소의 총 개수를 반환함. |
| Object[] toArray() | 해당 컬렉션의 모든 요소를 Object 타입의 배열로 반환함. |
'Back-End > Java' 카테고리의 다른 글
| [ JAVA ] java.time (0) | 2023.08.15 |
|---|---|
| [ JAVA ] Date, Calendar (0) | 2023.08.15 |
| [ JAVA ] Date to Calendar / Calendar to Date (0) | 2023.08.13 |
| [ JAVA ] 클래스간의 관계 1) has-a, DI(Dependency Injection) (0) | 2023.08.02 |
| [ JAVA ] 메서드(함수) (0) | 2023.07.23 |