Java Collection Framework
자바에서 컬렉션 프레임워크(collection framework)란 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미. java.util 패키지에 포함된 인터페이스들(List, Set, Map, Queue, Stack 등)을 구현한 클래스들이 컬렉션 프레임워크로 사용된다.
배열은 저장할 크기가 배열을 생성할 때 결정되어 배열의 크기가 넘어가면 저장이 불가능하다. 또한 데이터를 삭제하면 해당 인덱스의 데이터는 비어있는 구조라 메모리를 효율적으로 관리할 수 없다는 문제점이 발생된다. 이러한 배열이 갖는 문제점들을 컬렉션 프레임워크를 통해서 해결이 가능하다. 컬렉션 프레임워크들은 동적으로 데이터를 저장하는 크기(용량)가 자동적으로 늘어나고, 중간의 데이터를 삭제하면 인덱스가 하나씩 앞으로 당겨진다.
주요 인터페이스
List와 Set 인터페이스는 모두 Collection 인터페이스를 상속받지만, 구조상의 차이로 인해 Map 인터페이스는 별도로 정의된다.
- List:
객체를 인덱스로 관리하는 방식. 객체를 저장하면 자동으로 인덱스가 부여되며 해당 인덱스로 객체를 검색, 삭제 할 수 있다.
객체 자체를 저장하는 것이 아닌, 해당하는 인덱스에 객체 주소를 참조하여 저장한다.
데이터의 중복저장이 가능하다. - Set:
객체를 인덱스로 관리하지 않아 객체 간 순서가 지정되어 있지 않다.
데이터의 중복저장이 불가능하다. - Map:
키(Key) 객체와 값(Value) 객체의 한 쌍으로 이루어진 데이터의 집합으로 순서가 지정되어 있지 않다.
Key는 중복이 불가능하지만 Value는 중복이 가능하다. 만약 기존에 저장된 키와 동일한 키를 설정할 시 기존의 Key 데이터는 없어지고 새로운 데이터가 덮어쓰기 된다.
주요 인터페이스 특징
구분 | 특징 | 구현 클래스 | |
Collection | List<E> | 순서가 있는 데이터의 집합으로, 데이터의 중복을 허용함. | Vector, ArrayList, LinkedList, Stack, Queue |
Set<E> | 순서가 없는 데이터의 집합으로, 데이터의 중복을 허용하지 않음. | HashSet, TreeSet | |
Map<K, V> |
키와 값의 한 쌍으로 이루어지는 데이터의 집합으로, 순서가 없음. 이때 키는 중복을 허용하지 않지만, 값은 중복될 수 있음. |
HashMap, TreeMap, Hashtable, Properties |
Collection 인터페이스의 Method (메소드)
List와 Set의 조상인 Collection 인터페이스에서 제공하는 주요 메서드
메소드 |
설명 |
boolean add(Object o) boolean addAll(Collection c) |
해당 컬렉션에 전달된 요소를 추가함 |
void clear() |
해당 컬렉션의 모든 요소를 제거함 |
boolean contains(Object o) boolean containsAll(Collection c) |
지정된 객체(o) 또는 컬렉션의 객체들이 컬렉션에 포함되어 있는지 확인함 |
boolean equals(Object o) |
동일한 컬렉션인지 비교함 |
boolean isEmpty() |
컬렉션이 비어있는지 확인함 |
Iterator<E> iterator() |
해당 컬렉션의 반복자(iterator)를 반환함 |
boolean remove(Object o) |
지정된 객체를 삭제함 |
int size() |
해당 컬렉션의 요소의 총 개수를 반환함 |
Object[] toArray() |
해당 컬렉션의 모든 요소를 Object 타입의 배열로 반환함 |
컬렉션 클래스(collection class)
List 인터페이스
List 인터페이스는 중복을 허용하면서 저장순서가 유지되는 컬렉션을 구현하는데 사용된다. 대표적인 List 컬렉션 클래스에 속하는 클래스는 다음과 같다.
- ArrayList<E>
- LinkedList<E>
- Vector<E>
- Stack<E>
Set 인터페이스
Set 인터페이스를 구현한 Set 컬렉션 클래스는 요소의 저장 순서를 유지하지 않고, 같은 요소의 중복저장을 허용하지 않는다. 대표적인 Set 컬렉션 클래스에 속하는 클래스는 다음과 같다.
- HashSet<E>
- TreeSet<E>
각 컬렉션 클래스(collection class)의 특징
각 컬렉션 클래스마다 장,단점이 있으므로 구현원리와 특징을 잘 이해해야 효율적으로 데이터를 관리하고 사용할 수 있다.
컬렉션 |
특징 |
ArrayList |
배열 기반, 데이터의 추가와 삭제에 불리, 순차적인 추가삭제는 제일 빠름. 임의의 요소에 대한 접근성이 뛰어남. |
LinkedList |
연결기반, 데이터의 추가와 삭제에 유리, 임의이 요소에 대한 접근성이 좋지 않다. |
HashMap |
배열과 연결이 결합된 형태, 추가, 삭제, 검색, 접근성이 모두 뛰어남. 검색에는 최고. |
TreeMap |
연결기반, 정렬과 검색(특히 범위검색)에 적합. 검색 성능은 HashMap보다 떨어짐 |
Stack |
Vector를 상속받아 구현 |
Queue |
LinkedList가 Queue인터페이스를 구현 |
Properties |
Hashtable을 상속받아 구현 |
HashSet |
HashMap을 이용해서 구현 |
TreeSet |
TreeMap을 이용해서 구현 |
LinkedHashMap |
HashMap과 HashSet에 저장순서유지기능을 추가하였음. |
참고:
'Backend > Data Structure' 카테고리의 다른 글
2. Array 클래스 (0) | 2020.11.19 |
---|---|
1. Stack 클래스 (0) | 2020.11.14 |