컬렉션 프레임워크
collection framework
자바에서 컬렉션 프레임워크(collection framework)란 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미합니다
즉, 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것입니다.
![](https://velog.velcdn.com/images/wonizizi99/post/e9213bdd-aa9f-46b5-bcf2-b39fe33924b5/image.png)
이러한 컬렉션 프레임워크는 자바의 인터페이스(interface)를 사용하여 구현됩니다.
List, Set, Map, HashMap의 차이
1. List
- 순서가 있고 중복을 허용합니다.
- 인덱스로 원소에 접근이 가능합니다.
- 크기가 가변적입니다.
1-1. List의 종류와 특징
LinkedList
- 양방향 포인터 구조로 데이터 삽입, 삭제가 빠르다.
- ArrayList보다 검색이 느리다.
ArrayList
- 단반향 포인터 구조로 데이터 순차적 접근에 강점을 가진다.
- 배열을 기반으로 데이터를 저장한다.
- 데이터 삽입, 삭제가 느리다.
- 데이터 검색이 빠르다.
2. Set
- 데이터의 집합이며 순서가 없고 중복된 데이터를 허용하지 않습니다.
- 중복되지 않은 데이터를 구할 때 유용합니다.
- 빠른 검색 속도를 가집니다.
- 인덱스가 따로 존재하지 않기 때문에 iterator를 사용합니다.
2-1. Set의 종류와 특징
HashSet
- 인스턴스의 해시값을 기준으로 저장하기 때문에 순서를 보장하지 않는다.
- NULL 값을 허용한다.
- TreeSet보다 삽입, 삭제가 빠르다.
LinkedHashSet
TreeSet
- 이진 탐색 트리(Red-Black Tree)를 기반으로 한다.
- 데이터들이 오름차순으로 정렬된다.
- 데이터 삽입, 삭제에는 시간이 걸리지만 검색, 정렬이 빠르다.
3. Map
- Key와 Value의 한쌍으로 이루어지는 데이터의 집합.
- Key에 대한 중복이 없으며 순서를 보장하지 않습니다.
- 뛰어난 검색 속도를 가집니다.
- 인덱스가 따로 존재하지 않기 때문에 iterator를 사용합니다.
3-1. Map의 종류와 특징
HashMap
- Key에 대한 중복이 없으며 순서를 보장하지 않는다.
- Key와 Value 값으로 NULL을 허용한다.
- 동기화가 보장되지 않는다.
- 검색에 가장 뛰어난 성능을 가진다.
HashTable
- 동기화가 보장되어 병렬 프로그래밍이 가능하고 HashMap 보다 처리속도가 느리다.
- Key와 Value 값으로 NULL을 허용하지 않는다.
LinkedHashMap
TreeMap
- 이진 탐색 트리(Red-Black Tree)를 기반으로 키와 값을 저장한다.
- Key 값을 기준으로 오름차순 정렬되고 빠른 검색이 가능하다.
- 저장 시 정렬을 하기 때문에 시간이 다소 오래 걸린다.
4. Map VS HashMap 차이
구현 방식:
-
Map은 인터페이스이며, 이를 구현하는 클래스는 다양합니다. 예를 들어, "TreeMap", "LinkedMap", "HashTable" 등이 있습니다.
-
HashMap은 "Map" 인터페이스를 구현한 클래스 중 하나입니다.
성능:
- Map의 구현 클래스 중에서는 "TreeMap"과 같이 이진 검색 트리를 사용하여 데이터를 저장하는 클래스도 있지만, "HashMap"은 해시 테이블을 사용하여 데이터를 저장합니다.
- 해시 테이블은 키를 해시 함수를 사용하여 해시값으로 변환하고, 이를 인덱스로 사용하여 값을 저장합니다. 이 방식은 데이터의 검색 및 삽입에 O(1)의 상수 시간을 보장합니다. 반면, 이진 검색 트리는 데이터의 검색 및 삽입에 O(log n)의 시간이 소요됩니다.
따라서, "HashMap"은 "Map"의 다른 구현 클래스보다 빠른 성능을 보장합니다.
동기화:
- Map은 멀티스레드 환경에서 안전하지 않습니다. 즉, 여러 스레드가 동시에 "Map" 객체를 수정하면 데이터의 무결성이 보장되지 않을 수 있습니다.
- HashMap은 스레드 안전하지 않은 자료구조이므로, 멀티스레드 환경에서 사용할 경우에는 동기화 처리가 필요합니다.
따라서, "Map"과 "HashMap"은 데이터 저장 방식, 성능, 동기화 등에서 차이가 있으며, 사용 상황에 따라 선택해야 합니다.
- 일반적으로 단일 스레드 환경에서는 "HashMap"이 더 빠르고 간편하며, 멀티스레드 환경에서는 "ConcurrentHashMap"과 같이 스레드 안전한 자료구조를 사용하는 것이 안전하고 좋은 선택입니다.
참고
https://coding-factory.tistory.com/550
https://hudi.blog/java-collection-framework-1/
https://juyoungit.tistory.com/587