[Java] 컬렉션 프레임워크(Collections Framework)
by Frinee컬렉션 프레임워크(Collections Framework)
: 데이터 군을 저장하는 클래스들을 표준화한 설계를 뜻함. 컬렉션(Collection)은 다수의 데이터, 즉 데이터 그룹을, 프레임워크(Framework)는 표준화된 프로그래밍 방식을 말함.
1. 컬렉션 프레임워크의 핵심 인터페이스
인터페이스 | 특징 |
List | 순서가 있는 데이터의 집합. 데이터의 중복을 허용함. |
ex) ArrayList, LinkedList, Stack, Vector 등 | |
Set | 순서를 유지하지 않는 데이터의 집합. 데이터의 중복을 허용하지 않는다. |
ex) HashSet, TreeSet 등 | |
Map | 키(key)와 값(value)의 쌍(pair)으로 이루어진 데이터의 집합 순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용한다. 예) 우편번호, 지역번호(전화번호) |
ex) HashMap, TreeMap, Hashtable, Properties 등 |
- 컬렉션 프레임워크의 모든 컬렉션 클래스들은 List, Set, Map 중 하나를 구현하고 있음
1.1. Collection 인터페이스
- List와 Set의 조상인 Collection 인터페이스에는 다음과 같은 메서드들이 정의됨.
메서드 | 설명 |
boolean add(Object o) boolean addAll(Collection c) |
지정된 객체(o) 또는 Collection(c)의 객체들을 Collection에 추가한다. |
void Clear() | Collection의 모든 객체를 삭제한다. |
boolean contains(Object o) boolean containsAll(Collection c) |
지정된 객체(o) 또는 Collection(c)의 객체들이 Collection에 포함되어 있는지 확인한다. |
boolean equals(Object o) | 동일한 Collection인지 비교한다. |
int hashCode() | Collection의 hash code를 반환한다. |
boolean isEmpty() | Collection이 비어있는지 확인한다. |
Iterator iterator() | Collection의 Iterator를 얻어서 반환한다. |
boolean remove(Object o) | 지정된 객체를 삭제한다. |
boolean removeAll(Collection c) | 지정된 Collection에 포함된 객체들을 삭제한다. |
int size() | Collection에 저장된 객체의 개수를 반환한다. |
Object[] toArray() | Collection에 저장된 객체를 객체배열(Object[])로 반환한다. |
Object[] toArray(Object[] a) | 지정된 배열에 Collection의 객체를 저장해서 반환한다. |
1.2. List 인터페이스
- List 인터페이스는 중복을 허용하면서 저장순서가 유지되는 컬렉션을 구현하는데 사용.
메서드 | 설명 |
void add(int index, Object element) boolean addAll(int index,Collection c) |
지정된 위치(index)에 객체(element) 또는 컬렉션에 포함된 객체들을 추가한다. |
Object get(int index) | 지정된 위치(index)에 있는 객체를 반환한다. |
int indexOf(Object o) | 지정된 객체의 위치(index)를 반환한다. (List의 첫번째 요소로부터 순방향으로 찾는다.) |
int lastIndexOf(Object o) | 지정된 객체의 위치(index)를 반환한다. (List의 마지막 요소로부터 역방향으로 찾는다.) |
ListIterator listIterator() ListIterator listIterator(int index) |
List의 객체에 접근할 수 있는 Iterator를 반환한다. |
Object remove(int index) | 지정된 위치(index)에 있는 객체를 삭제하고 삭제된 객체를 반환한다. |
void sort(Comparator c) | 지정된 비교자(Comparator)로 List를 정렬한다. |
List subList(int fromIndex, int toIndex) |
지정된 범위(fromIndex, toIndex)에 있는 객체를 반환한다. |
1.3. Set 인터페이스
- Set 인터페이스는 중복을 허용하지 않고 저장순서가 유지되지 ㅇ낳는 컬렉션 클래스를 구현하는 데 사용.
- Set 인터페이스를 구현한 클래스로는 HashSet, TreeSet 등이 있음.
1.4. Map 인터페이스
- Map 인터페이스는 키와 값을 하나의 쌍으로 묶어 저장하는 컬렉션 클래스를 구현하는 데 사용
- 키는 중복될 수 없지만 값은 중복을 허용함.
- 기존에 저장된 데이터와 중복된 키와 값을 저장하면 기존의 값은 없어지고 마지막에 저장된 값이 남게 됨.
메서드 | 설명 |
void clear() | Map의 모든 객체를 삭제한다. |
boolean containsKey(Object key) | 지정된 key객체와 일치하는 Map의 key객체가 있는지 확인한다. |
boolean containsValue(Object value) | 지정된 value 객체와 일치하는 Map의 value객체가 있는지 확인다. |
Set entrySet() | Map에 저장되어 있는 key-value 쌍을 Map.Entry타입의 객체로 저장한 Set으로 반환한다. |
boolean equals(Object o) | 동일한 Map인지 비교한다. |
Object get(Object key) | 지정한 key객체에 대응하는 value객체를 찾아서 반환한다. |
int hashCode() | 해시코드를 반환한다. |
boolean isEmpty() | Map이 비어있는지 확인한다. |
Set keySet() | Map에 저장된 모든 key객체를 반환한다. |
Objcect put(Object key, Object value) | Map에 value객체를 key객체에 연결하여 저장한다. |
void putAll(Map t) | 지정된 Map의 모든 key-value쌍을 추가한다. |
Object remove(Object key) | 지정한 key객체와 일치하는 key-value객체를 삭제한다. |
int size() | Map에 저장된 key-value쌍의 개수를 반환한다. |
Collection values() | Map에 저장된 모든 value객체를 반환한다. |
- Map.Entry인터페이스는 Map에 저장되어 있는 key-value 쌍을 다루기 위해 내부적으로 정의한 인터페이스이다.
2. 컬렉션 프레임워크의 종류
2.1. ArrayList
- 컬렉션 프레임워크에서 가장 많이 사용하는 컬렉션 클래스
- 데이터의 저장순서가 유지
2.2. LinkedList
- 배열의 가장 기본적인 형태의 자료구조
- 구조가 간단하며 사용하기 쉽고 데이터를 읽어오는데 걸리는 시간이 가장 빠름
- 크기를 변경할 수 없고 비순차적인 데이터 추가 혹은 삭제에 시간이 많이 걸림
- 각 요소는 다음 요소에 대한 참조값과 데이터로 구성됨.
2.3. Stack & Queue
- 스택(Stack)
- 스택(Stack)은 마지막에 저장한 데이터를 가장 먼저 꺼내는 LIFO 구조
- 스택은 ArrayList 기반 배열기반 컬렉션 클래스가 적합함.
- 큐(Queue)
- 큐(Queue)는 처음에 저장한 데이터를 가장 먼저 꺼내는 FIFO 구조
- 큐는 데이터 추가/삭제가 쉬운 LinkedList로 구현하는 것이 더 적합함.
2.4. HashSet
- Set인터페이스를 구현한 가장 대표적인 컬렉션
- 중복된 요소를 저장하지 않는 특징
2.5. TreeSet
- 이진 검색 트리(binary search tree)라는 자료구조의 형태로 데이터를 저장하는 데이터 컬렉션 클래스
- 중복된 데이터의 저장을 허용하지 않으며 정렬된 위치에 저장하므로 저장순서를 유지하지 않음
2.6. HashMap
- Map의 특징, 키(key)와 값(value)을 묶어서 하나의 데이터로 저장하는 특징을 가짐.
- 해싱(hashing)을 사용하기 때문에 많은 양의 데이터를 검색하는데 있어 뛰어난 성능을 보임.
2.7. TreeMap
- 이진검색트리의 형태로 키와 값의 쌍으로 이루어진 데이터를 저장함.
- 검색과 정렬에 적합한 컬렉션 클래스
- 특히, HashMap과 비교했을 때 범위검색이나 정렬이 필요한 경우 성능이 더 좋음.
2.8. Properties
- HashMap의 구버전인 HashTable을 상속받아 구현한 것으로, (String, String)의 형태로 저장하는 보다 단순화된 컬렉션 클래스
- 주로 애플리케이션의 환경설정과 관련된 속성을 저장하는데 사용
- 데이터를 파일로부터 읽고 쓰는 편리한 기능을 제공함.
'Backend > Java' 카테고리의 다른 글
[Java] Generics, Enum, Annotation (1) | 2025.02.18 |
---|---|
[Java] 예외 처리(exception handling) (0) | 2025.02.11 |
[Java] 객체지향 프로그래밍 (OOP) (0) | 2025.01.27 |
자바 기본 구조와 기본 문법 (0) | 2025.01.18 |
블로그의 정보
프리니의 코드저장소
Frinee