Java/이론 및 문법

[Java] Collection Framework(List, Map, Set)의 인터페이스와 구현체 이해하기 - 1 : 정의 및 예시

adjh54 2023. 3. 6. 22:36
728x170
해당 글에서는 컬렉션 프레임워크(Collection Framework)내에서 사용되는 인터페이스와 이를 구현하는 구현체 간의 관계를 이해하기 위한 목적으로 작성한 글입니다.

 
 

1) 요약


 

클래스분류설명
Map인터페이스Key-Value의 쌍을 저장하는 인터페이스입니다
HashMapMap 인터페이스의 구현체해시 테이블을 사용하여 Key-Value 쌍을 저장합니다.
TreeMapMap 인터페이스의 구현체레드-블랙 트리를 사용하여 Key-Value 쌍을 저장합니다. Key 값에 따라 정렬됩니다.
LinkedHashMapMap 인터페이스의 구현체해시 테이블과 연결 리스트를 사용하여 Key-Value 쌍을 저장합니다. 삽입 순서대로 출력됩니다.
ConcurrentHashMapMap 인터페이스의 구현체HashMap과 유사하지만 멀티스레드 환경에서 안전하게 사용할 수 있습니다.
HashtableMap 인터페이스의 구현체HashMap과 유사하지만 멀티스레드 환경에서 안전하게 사용할 수 있습니다.
   
List인터페이스모두 순차적으로 저장하는 자료구조입니다.
ArrayListList 인터페이스의 구현체내부적으로 배열을 사용하여 데이터를 저장하는 클래스. 데이터 접근 속도가 매우 빠르기 때문에 대용량 데이터 처리에 적합합니다.
LinkedListList 인터페이스의 구현체내부적으로 연결 리스트를 사용하여 데이터를 저장하는 클래스. 데이터 삽입/삭제 작업이 빈번하게 일어나는 경우에 적합합니다.
VectorList 인터페이스의 구현체ArrayList와 거의 동일하지만 동기화된 메서드를 제공합니다. 멀티스레드 환경에서 안전하게 사용할 수 있습니다.
   
Set인터페이스중복을 허용하지 않는 자료구조입니다
HashSetSet 인터페이스의 구현체내부적으로 HashMap을 사용하여 데이터를 저장하는 클래스입니다.
TreeSetSet 인터페이스의 구현체내부적으로 TreeMap을 사용하여 데이터를 저장하는 클래스입니다. 데이터는 정렬된 상태로 저장됩니다.
LinkedHashSetSet 인터페이스의 구현체내부적으로 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 쌍을 저장합니다. 삽입 순서대로 출력됩니다.“입력한 순서대로 데이터를 저장”하고 싶다면 이를 사용하며 된다.
ConcurrentHashMapHashMap과 유사하지만 멀티스레드 환경에서 안전하게 사용할 수 있습니다.멀티스레드 환경에서 안전하게 사용할때 이를 사용하는것이 좋다.
HashtableHashMap과 유사하지만 멀티스레드 환경에서 안전하게 사용할 수 있습니다.멀티스레드 환경에서 안전하게 사용해야 할 때 사용하는것이 좋으나 일반적으로는 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내부적으로 연결 리스트를 사용하여 데이터를 저장하는 클래스. 데이터 삽입/삭제 작업이 빈번하게 일어나는 경우에 적합합니다.“리스트의 중간에 삽입 또는 삭제가 빈번하게 일어나는 경우”에는 이를 사용하면 된다.
VectorArrayList와 거의 동일하지만 동기화된 메서드를 제공합니다. 멀티스레드 환경에서 안전하게 사용할 수 있습니다.멀티스레드 환경에서 안전하게 사용할때 이를 사용하는것이 좋다.

 
 
 

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을 사용하여 데이터를 저장하는 클래스입니다. 삽입 순서대로 출력됩니다.“데이터를 삽입한 순서대로 출력”하고 싶다면 이를 사용하면 된다.

 
 
 
오늘도 감사합니다. 😀
 
 
 

그리드형