반응형
해당 글에서는 컬렉션 프레임워크(Collection Framework)내에서 사용되는 인터페이스와 이를 구현하는 구현체 간의 관계를 이해하기 위한 목적으로 작성한 글입니다.
1) 요약
클래스 | 분류 | 설명 |
Map | 인터페이스 | Key-Value의 쌍을 저장하는 인터페이스입니다 |
HashMap | Map 인터페이스의 구현체 | 해시 테이블을 사용하여 Key-Value 쌍을 저장합니다. |
TreeMap | Map 인터페이스의 구현체 | 레드-블랙 트리를 사용하여 Key-Value 쌍을 저장합니다. Key 값에 따라 정렬됩니다. |
LinkedHashMap | Map 인터페이스의 구현체 | 해시 테이블과 연결 리스트를 사용하여 Key-Value 쌍을 저장합니다. 삽입 순서대로 출력됩니다. |
ConcurrentHashMap | Map 인터페이스의 구현체 | HashMap과 유사하지만 멀티스레드 환경에서 안전하게 사용할 수 있습니다. |
Hashtable | Map 인터페이스의 구현체 | HashMap과 유사하지만 멀티스레드 환경에서 안전하게 사용할 수 있습니다. |
List | 인터페이스 | 모두 순차적으로 저장하는 자료구조입니다. |
ArrayList | List 인터페이스의 구현체 | 내부적으로 배열을 사용하여 데이터를 저장하는 클래스. 데이터 접근 속도가 매우 빠르기 때문에 대용량 데이터 처리에 적합합니다. |
LinkedList | List 인터페이스의 구현체 | 내부적으로 연결 리스트를 사용하여 데이터를 저장하는 클래스. 데이터 삽입/삭제 작업이 빈번하게 일어나는 경우에 적합합니다. |
Vector | List 인터페이스의 구현체 | ArrayList와 거의 동일하지만 동기화된 메서드를 제공합니다. 멀티스레드 환경에서 안전하게 사용할 수 있습니다. |
Set | 인터페이스 | 중복을 허용하지 않는 자료구조입니다 |
HashSet | Set 인터페이스의 구현체 | 내부적으로 HashMap을 사용하여 데이터를 저장하는 클래스입니다. |
TreeSet | Set 인터페이스의 구현체 | 내부적으로 TreeMap을 사용하여 데이터를 저장하는 클래스입니다. 데이터는 정렬된 상태로 저장됩니다. |
LinkedHashSet | Set 인터페이스의 구현체 | 내부적으로 LinkedHashMap을 사용하여 데이터를 저장하는 클래스입니다. 삽입 순서대로 출력됩니다. |
2) Map 인터페이스를 기반으로 하는 클래스들
💡 Map과 HashMap은 모두 Key-Value를 쌍으로 저장하는 자료구조입니다. 하지만 두 자료구조에는 차이점이 있습니다.
💡 두개의 차이점은 인터페이스(Map)인지 아니면 인터페이스를 구현하는 클래스(HashMap)인지 여부입니다.
💡 Map의 경우는 Key-Value의 쌍을 저장하는 인터페이스입니다.
💡 HashMap은 Map의 인터페이스를 구현하는 클래스 중 하나입니다.
// Map은 인터페이스, HashMap은 인터페이스의 구현체
Map<String, Object> strMap = new HashMap<>();
// Map은 인터페이스, TreeMap은 인터페이스의 구현체
Map<String, Object> strTreeMap = new TreeMap<>();
// Map은 인터페이스, LinkedHashMap은 인터페이스의 구현체
Map<String, Object> strLinkedMap = new LinkedHashMap<>();
// Map은 인터페이스, ConcurrentHashMap은 인터페이스의 구현체
Map<String, Object> strCurrMap = new ConcurrentHashMap<>();
// Map은 인터페이스, Hashtable은 인터페이스의 구현체
Map<String, Object> strHashTableMap = new Hashtable<>();
💡 [참고] Map 인터페이스를 기반의 구현 클래스 목록
클래스 | 설명 | 사용예시 |
HashMap | 해시 테이블을 사용하여 Key-Value 쌍을 저장합니다. | 일반적으로 가장 많이 사용되고 효율적으로 동작하기에 이를 사용하면 됩니다. |
TreeMap | 레드-블랙 트리를 사용하여 Key-Value 쌍을 저장합니다. Key 값에 따라 정렬됩니다. | “데이터를 정렬된 순서로 저장”하고 싶다면 이를 사용하면 된다. |
LinkedHashMap | 해시 테이블과 연결 리스트를 사용하여 Key-Value 쌍을 저장합니다. 삽입 순서대로 출력됩니다. | “입력한 순서대로 데이터를 저장”하고 싶다면 이를 사용하며 된다. |
ConcurrentHashMap | HashMap과 유사하지만 멀티스레드 환경에서 안전하게 사용할 수 있습니다. | 멀티스레드 환경에서 안전하게 사용할때 이를 사용하는것이 좋다. |
Hashtable | HashMap과 유사하지만 멀티스레드 환경에서 안전하게 사용할 수 있습니다. | 멀티스레드 환경에서 안전하게 사용해야 할 때 사용하는것이 좋으나 일반적으로는 HashMap을 사용하는 것이 더 효율적입니다. |
3) List 인터페이스를 기반으로 하는 클래스들
💡 List와 ArrayList는 모두 순차적으로 저장하는 자료구조입니다. 하지만 두 자료구조는 차이점이 있습니다.
💡 두 개의 차이점은 인터페이스(List)인지 아니면 인터페이스를 구현하는 클래스(ArrayList)인지 여부입니다.
💡 List의 경우는 순차적으로 데이터를 저장하는 인터페이스입니다.
💡 ArrayList은 List의 인터페이스를 구현하는 클래스 중 하나입니다.
// List는 인터페이스, ArrayList는 인터페이스의 구현체
List<String> strList = new ArrayList<>();
// List는 인터페이스, LinkedList는 인터페이스의 구현체
List<String> strLinkedList = new LinkedList<>();
// List는 인터페이스, Vector는 인터페이스의 구현체
List<String> strVector = new Vector<>();
💡 [참고] List 인터페이스를 기반의 구현 클래스 목록
클래스 | 설명 | 사용예시 |
ArrayList | 내부적으로 배열을 사용하여 데이터를 저장하는 클래스. 데이터 접근 속도가 매우 빠르기 때문에 대용량 데이터 처리에 적합합니다. | 일반적으로 가장 많이 사용되고 효율적으로 동작하기에 이를 사용하면 됩니다. |
LinkedList | 내부적으로 연결 리스트를 사용하여 데이터를 저장하는 클래스. 데이터 삽입/삭제 작업이 빈번하게 일어나는 경우에 적합합니다. | “리스트의 중간에 삽입 또는 삭제가 빈번하게 일어나는 경우”에는 이를 사용하면 된다. |
Vector | ArrayList와 거의 동일하지만 동기화된 메서드를 제공합니다. 멀티스레드 환경에서 안전하게 사용할 수 있습니다. | 멀티스레드 환경에서 안전하게 사용할때 이를 사용하는것이 좋다. |
4) Set 인터페이스를 기반으로 하는 클래스들
💡 Set과 HashSet은 중복을 허용하지 않는 자료구조입니다. 하지만 두 자료구조는 차이점이 있습니다.
💡 두 개의 차이점은 인터페이스(Set)인지 아니면 인터페이스를 구현하는 클래스(HashSet)인지 여부입니다.
💡 Set의 경우는 중복을 허용하지 않고 데이터를 저장하는 인터페이스입니다.
💡 HashSet은 Set의 인터페이스를 구현하는 클래스 중 하나입니다.
// Set은 인터페이스, HashSet는 인터페이스의 구현체
Set<String[]> strArrSet = new HashSet<>();
// Set은 인터페이스, TreeSet는 인터페이스의 구현체
Set<String[]> strArrTreeSet = new TreeSet<>();
// Set은 인터페이스, LinkedHashSet는 인터페이스의 구현체
Set<String[]> strArrLinkedSet = new LinkedHashSet<>();
💡 [참고] Set 인터페이스를 기반으로 구현 클래스 목록
클래스 | 설명 | 사용 예시 |
HashSet | 내부적으로 HashMap을 사용하여 데이터를 저장하는 클래스입니다. | 일반적으로 가장 많이 사용되고 효율적으로 동작하기에 이를 사용하면 됩니다. |
TreeSet | 내부적으로 TreeMap을 사용하여 데이터를 저장하는 클래스입니다. 데이터는 정렬된 상태로 저장됩니다. | “데이터를 정렬된 순서대로 저장”하고 싶다면 이를 사용하면 된다. |
LinkㅠedHashSet | 내부적으로 LinkedHashMap을 사용하여 데이터를 저장하는 클래스입니다. 삽입 순서대로 출력됩니다. | “데이터를 삽입한 순서대로 출력”하고 싶다면 이를 사용하면 된다. |
오늘도 감사합니다. 😀
반응형
'Java > 이론 및 문법' 카테고리의 다른 글
[Java] JDK(Java Development Kit), Open JDK 이해하기 (0) | 2023.06.25 |
---|---|
[Java] UUID 이해 및 사용방법 (0) | 2023.03.09 |
[Java] Collection Framework(Queue, Stack, Deque)의 인터페이스와 구현체 이해하기 -2 : 정의 및 예시 (0) | 2023.03.08 |
[Java] 자료형(Data Type) 이해하기 : 기본 / 참조 자료형, 래퍼 클래스 (0) | 2023.02.21 |
[Java] 정규표현식(RegExp) 이해하기 : 패턴, 문자 클래스, 자주 사용 패턴 (2) | 2023.01.23 |