JAVA [JAVA] Map을 구현하는 클래스 종류 미로그 2024. 5. 19. 12:41 자바 컬렉션 프레임워크 _ Map 인터페이스 1. HashMap Map 컬렉션 클래스에서 가장 많이 사용되는 클래스이다. Map의 특징처럼 키와 값을 묶어서 하나의 데이터(entry)로 저장한다. 해싱(hasing)을 사용하기에 많은 양의 데이터를 검색하는데 있어서 뛰어난 성능을 보인다. HashMap은 키(key)와 값(value)에 null을 허용한다. 동기화를 보장하지 않는다. 동기화 처리를 하지 않기 때문에 검색속도가 빠르다. But 신뢰성과 안정성이 떨어진다. 싱글 쓰레드 환경에서 사용하는 것이 좋다. ( thread-safe하지 않기 때문) 2. HashTable HashMap 클래스와 같은 동작을 하는 클래스이다. 키와 값에 null을 허용하지 않는다. 동기화를 보장한다. 멀티 쓰레드 환경에서 사용할 수 있다. ( thread-safe하기 때문) - 메서드를 호출하기 전에 쓰레드간 동기화 락을 걸기 때문에 멀티 쓰레드 환경에서도 데이터 무결성을 보장한다. 하지만 쓰레드간 동기화 락은 매우 느린 동작이다. - Hashtable과 HashMap의 관계는 Vector와 ArrayList 관계와 같다. 즉, 기존 코드와의 호환성 때문에 남아있는 것으로 Hashtable 클래스보다는 HashMap을 사용하는 것을 권장한다. 3. TreeMap 키와 값을 한 쌍으로 하는 데이터를 이진 검색 트리(Binary Search Tree)의 형태로 저장한다. 데이터를 추가하거나 제거하는 동작은 매우 빠르다. 데이터를 저장할 때 즉시 정렬함으로, 추가나 삭제가 HashMap보다 오래 걸린다. But 정렬된 상태로 Map을 유지하거나 정렬된 데이터를 조회해야 하는 범위 검색인 경우 성능이 빠르다. 4. ConcurrentHashMap key와 value에 null을 허용하지 않는다. 동기화를 보장한다. 멀티 쓰레드 환경에서 사용할 수 있다. ( thread-safe하기 때문) HashTable보다 데이터 다루는 속도가 빠르다. ConcurrentHashMap는 HashMap의 동기화 문제를 보완하기 위해 나온 것이다. 동기화 처리를 할 때 어떤 Entry를 조작하는 경우 해당 Entry만 락을 건다. 그래서 HashTable보다 데이터 다루는 속도가 빠르다. 즉, Entry 아이템별로 락을 걸어 멀티 쓰레드 환경에서의 성능을 향상시킨다. Reference https://ssdragon.tistory.com/70 https://velog.io/@baekgom/%EC%9E%90%EB%B0%94-%EC%BB%AC%EB%A0%89%EC%85%98-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-Map-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4 공유하기 게시글 관리 MI_Log 'JAVA' 카테고리의 다른 글 [JAVA] Inner Class 란?(내부 클래스) (0) 2024.07.30 [JAVA] Spring 어노테이션 @SuppressWarnings 이란? (0) 2024.07.30 [JAVA] MAP과 HASH MAP의 차이? (0) 2024.05.19 [JAVA] Maven 이란? (0) 2024.05.19 [JAVA] Public Class 꼭 사용하는 이유? (feat. Public Class VS Class) (0) 2024.03.27 'JAVA' Related Articles [JAVA] Inner Class 란?(내부 클래스) [JAVA] Spring 어노테이션 @SuppressWarnings 이란? [JAVA] MAP과 HASH MAP의 차이? [JAVA] Maven 이란?