컬렉션 프레임 워크란 객체들을 효율적으로 관리하기 위해 표준화된 방법
크기 고정, 타입 제한, 유선성 부족 등의 배열의 한계를 극복하기 위해 고안돼었다.
Collection은 하나의 인터페이스로

주요 인터페이스로는
ListSetMap이 있다.
말 그대로 객체들의 목록을 저장할 수 있는 인터페이스이다.
| 메서드 | 리턴타입 | 설명 |
|---|---|---|
add(E element) |
boolean |
매개 변수로 넘어온 요소를 추가 |
contains(E element) |
boolean |
매개변수로 넘어온 요소가 있는지 확인 |
get(int index) |
E |
주어진 인덱스에 저장된 객체 반환 |
remove(int index) |
E |
주어진 인덱스에 저장된 객체 반환 및 제거 |
isEmpty() |
boolean |
컬렉션이 비어있는지 확인 |
set(int index, E e) |
E |
특정 인덱스의 요소를 전달 받은 객체로 대체 |
size() |
int |
리스트의 요소의 총 개수를 반환 |
toArray() |
Object[] |
리스트의 모든 요소를 Object타입의 배열로 반환 |
List 인터페이스를 상속 받는 주요 클래스는
ArrayListLinkedListStack등이 있다.
배열을 이용해 요소를 저장하기 때문에 인덱스를 이용해 요소에 빠르게 접근할 수 있다.
하지만 배열은 크기를 변경할 수 없기 때문에 요소의 추가 및 삭제에 걸리는 시간이 매우 길어진다.
linked list 구조를 이용하여 요소를 저장한다.
그렇기 때문에 데이터의 삽입 / 삭제에 유리하다.
ArrayList |
LinkedList |
|
|---|---|---|
데이터 저장 방식 |
동적 배열 |
이중 연결 리스트 |
메모리 사용 |
효율적
|
비효율적
- 노드 별로 데이터와 함께 포인터 저장 |
삽입/삭제 시간 |
비효율적
|
빠름 |
사용 |
접근이 빈번한 경우 |
삽입/삭제가 빈번한 경우 |
무작위 접근 시간 |
빠름 |
느림 |
| 순차 접근 시간 | 빠름 |
| 메서드 | 리턴타입 | 설명 |
|---|---|---|
add(E element) |
boolean |
매개 변수로 넘어온 요소를 추가 |
contains(E element) |
boolean |
매개변수로 넘어온 요소가 있는지 확인 |
remove(int index) |
E |
주어진 인덱스에 저장된 객체 반환 및 제거 |
isEmpty() |
boolean |
컬렉션이 비어있는지 확인 |
size() |
int |
요소의 총 개수를 반환 |
toArray() |
Object[] |
모든 요소를 Object타입의 배열로 반환 |
Set인터페이스를 상속 받는 주요 클래스는HashSetLinkedHashSetTreeSet등이 있다.
해시 알고리즘을 사용하여 검색 속도가 매우 빠르다.
해시 함수를 이용해 데이터를 저장하는 방법이다.
자세한 설명은 아래 링크에 설명했다.
위 HashSet과 같이 해시 알고리즘을 사용하여 검색 속도가 매우 빠르다.
다만, 연결 리스트를 사용하여 데이터의 저장 순서가 보장된다.
데이터를 정렬된 상태로 저장되는 BST 형태로 요소를 저장한다.
데이터 삽입/제거의 동작 시간이 매우 빠르다.
JDK 1.2부터는 NavigableSet 인터페이스를 더욱 향상 시킨 Red-Black tree로 구현한다.
데이터를 Key-Value로 이루어진 하나의 쌍으로 저장한다.
Key란 실질적인 데이터 Value를 찾기 위한 이름의 역할을 한다.
구조상의 차이로 인해 Collection 인터페이스를 상속 받지 않는다.
| 메서드 | 리턴타입 | 설명 |
|---|---|---|
put(K key, V value) |
V |
key와 value를 매핑하여 저장 |
get(K key) |
V |
전달 받은 key에 대응하는 value 반환, 없다면 null 반환 |
remove(K Key) |
V |
key에 대응하는 매핑 제거 |
isEmpty() |
boolean |
맵이 비어있는지 확인 |
size() |
int |
매핑의 총 개수를 반환 |
containsKey(K key) |
boolean |
key를 포함하고 있는지 확인 |
containsValue(V value) |
boolean |
value를 포함하고 있는지 확인 |
Map인터페이스를 상속 받는 주요 클래스는HashMapTreeMap등이 있다.
HashMap과TreeMap의 특징은Set과 동일하기에 설명을 생략한다.
| 메서드 | 리턴타입 | 설명 |
|---|---|---|
hasNext() |
boolean |
iteration이 다음 요소를 가지고 있다면 true, 그렇지 않다면 false 반환 |
next() |
E |
iteration의 위치를 다음 값으로 이동하고 그 값을 반환 |
remove() |
void |
iterator가 마지막으로 반환한 값을 컬랙션에서 제거 |
하지만 현재 자바에서는 객체를 순회할 때 향상된 for문 사용하도록 권장하고 있다.
후입선출(LIFO) 특성을 가진다.
데이터를 상자안에 쌓는다고 생각하면 좋다.
데이터를 쌓고 반출할 때는 가장 마지막에 쌓은 데이터를 반환하게 된다.
| 메서드 | 리턴타입 | 설명 |
|---|---|---|
empty() |
boolean |
스택이 비어있는지 확인 |
push(E element) |
E |
스택의 제일 상단에 요소 저장 |
pop() |
E |
스택의 제일 상단에 있는 요소를 반환하고 제거 |
peek() |
E |
스택의 제일 상단에 있는 요소를 반환 |
search(Object o) |
int |
요소가 저장된 위치의 인덱스를 반환
인덱스는 1부터 시작하며 제일 상단의 위치부터 시작 |
선입선출(FIFO) 특성을 가진다.
데이터를 대기열에 세운다고 생각하면 좋다.
데이터를 줄에 세우고 반출할 때는 가장 먼저 줄ㅇ츨 섰던 데이터를 반출한다.
| 메서드 | 리턴타입 | 설명 |
|---|---|---|
add(E element) |
boolean |
큐의 매뒤에 요소 삽입
성공하면 true, 실패하면 IllegalStateException발생 |
offer(E element) |
boolean |
큐의 맨뒤에 요소 삽입 |
peek() |
E |
큐의 맨 앞에 있는 요소 반환 |
poll() |
E |
큐의 맨 앞에 있는 요소 반환 및 제거
비어 있다면 null 반환 |
remove() |
E |
큐의 맨 앞에 있는 요소 반환 |
Queue와 동일한 자료 구조를 갖지만 요소를 앞 뒤로 추가 및 제거할 수 있다.
즉, Stack과 Queue의 특성을 모두 가진 자료구조이다.

개인적으로
Deque의 메서드는Stack과Queue와 혼동하기 쉽다고 생각한다.
그렇기에 아래 링크에서 숙달하는것이 좋다고 생각한다.
https://docs.oracle.com/javase/8/docs/api/