728x90
반응형

“ArrayList? Set? Hash 뭐시기? 그냥 배열에 때려 넣으면 안 돼요?”


1. Java Collections Framework(JCF)란?

JCF는 자바에서 데이터를 그룹으로 관리하기 위한 자료구조 라이브러리 집합입니다.
배열을 대체하고, 더 강력하게 데이터를 처리할 수 있게 해줍니다.


2. 컬렉션 상속 구조도

         ┌──────────┐
         │Collection│
         └────┬─────┘
      ┌────────┼────────┐
     List      Set     Queue
      │         │        │
┌─────┴─────┐  ┌┴┐     ┌─┴─┐
ArrayList  ... HashSet ...

※ Map은 Collection을 상속하진 않지만, 함께 묶어서 취급합니다.


3. 주요 인터페이스와 특징

✅ Set (중복 ❌, 순서 ❌)

구현체특징
HashSet 가장 빠른 접근 속도, 순서 없음
TreeSet 자동 정렬 가능 (오름차순/내림차순 설정 가능)
 

✅ List (중복 ⭕, 순서 ⭕)

구현체특징
ArrayList 인덱스 기반, 조회 성능 우수
LinkedList 삽입/삭제에 유리
Vector 동기화 지원. 구식이라 거의 안 씀
 

✅ Queue (선입선출 구조)

구현체특징
LinkedList 양방향 연결 구조
PriorityQueue 우선순위 기반 처리 가능
 

✅ Map (Key 중복 ❌, Value 중복 ⭕

구현체특징
HashMap 가장 자주 쓰이며, null 허용
TreeMap 자동 정렬
Hashtable 동기화 지원. null 금지, 구식
 

4. 언제 어떤 컬렉션을 써야 할까?

상황추천 컬렉션
중복 없이 저장 HashSet
인덱스 접근, 조회 위주 ArrayList
삽입/삭제 잦음 LinkedList
Key-Value 저장 HashMap
정렬된 데이터 필요 TreeSet, TreeMap
스레드 동기화 필요 Vector, Hashtable (하지만 잘 안 씀)
 

5. 한줄 요약

"Java 컬렉션은 목적에 맞게 잘 골라 써야 성능이 살아납니다!"

 

728x90
반응형
728x90
반응형

인프런 강의를 듣던 중 회원 도메인 설계를 하다가 동시성 이슈 때문에 HashMap보다는 ConcurrentHashMap을 사용한다라고 배웠습니다. 과연 두 개의 차이점은 어떤 점 있는지, 각 각의 장단점을 깊게 파보고 싶어서 정리해보았습니다.

출처:  https://javaconceptoftheday.com/hashmap-vs-concurrenthashmap-in-java/


 해외 문서를 찾아보다가 잘 정리되어 있는 문서를 발견하고 정리해보았습니다.


HashMap과 ConcurrentHashMap의 차이점


1) Thread Safe

주요 차이점은 ConcurrentHashMap는 내부적 동기화 때문에 스레드가 Safe합니다. 

HashMap는 내부적으로 동기화되지 않고 스레드로부터 안전하지 않습니다. HashMap 메서드를 사용하여 외부에서 동기화 할 수 있습니다.

 

2) Internal Structure(내부구조)

ConcurrentHashMap의 모든 작업이 동기화되는 것은 아닙니다. 추가 및 삭제와 같은 수정 작업만 동기화됩니다. 읽기 작업은 동기화되지 않습니다. 이렇게 하면 ConcurrentHashMap이 외부에서 동기화된 HashMap보다 동시 다중 스레드 응용 프로그램에 대한 첫 번째 선택 맵이 됩니다.

 

3) Null Keys And Null Values

HashMap은 최대 하나의 null 키와 임의의 수의 null 값을 허용합니다.ConcurrentHashMap은 null 키와 null 값도 허용하지 않습니다.

 

4) Fail-Fast Vs Fail-Safe

HashMap에 의해 반환된 반복자는 본질적으로 빠른 속도입니다. 반복자 생성 후 맵이 수정되면ConcurrentModificationException이 발생하기 때문입니다. ConcurrentHashMap에 의해 반환된 반복자는 본질적으로 안전합니다. iterator 생성 후 맵이 수정되면 예외가 발생하지 않습니다.

 

5) Performance(성능)

ConcurrentHashMap에 대한 수정 작업만 동기화됩니다. 따라서 ConcurrentHashMap에 대한 추가 또는 제거 작업은 HashMap보다 느립니다. ConcurrentHashMap 및 HashMap 모두에 대한 읽기 작업은 두 맵의 읽기 작업이 동일한 성능을 제공합니다.

결론적으로 ConcurrentHashMap는 내부적으로 동기화 함으로, 동시 멀티 쓰레드 어플리케이션에 적합합니다. HashMap은 내부적으로 동기화 되지않습니다. 따라서 단일 쓰레드 프로그램에 적합합니다.

 

https://applepick.tistory.com/124

 

[동시성 이슈해결] HashMap보다는 ConcurrentHashMap을 쓰자!

인프런 강의를 듣던 중 회원 도메인 설계를 하다가 동시성 이슈 때문에 HashMap보다는 ConcurrentHashMap을 사용한다라고 배웠습니다. 과연 두 개의 차이점은 어떤 점 있는지, 각 각의 장단점을 깊게 파

applepick.tistory.com

 

728x90
반응형

+ Recent posts