Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

HashMap과 ConcurrentHashMap의 차이점

<시간/>

Java Collections에서 알 수 있듯이 데이터를 보유하는 가장 중요한 데이터 구조 중 하나입니다. 컬렉션에는 데이터 저장에 가장 가치가 있는 Map, Set List 등과 같은 여러 구현이 있으며 이러한 구현은 데이터 저장을 효율적으로 만들 뿐만 아니라 멀티 스레딩 환경에서 데이터 처리를 허용하기 때문에 적절하게 조작합니다.

컬렉션의 다른 모든 구현 중에서 해시 맵은 키 값 쌍에 데이터를 저장하는 중요한 컬렉션 중 하나입니다. 다중 스레딩과 관련하여 해시 맵의 속성과 함께 다중 스레딩 환경에서 데이터 처리를 허용하는 동시 컬렉션으로 알려진 컬렉션의 구현이 하나 더 있습니다.

이 두 컬렉션의 내부 구현을 기반으로 하면 다음과 같은 중요한 차이점이 있습니다.

Sr. 아니요. 해시맵 ConcurrentHashMap
1 동시성 위에서 언급했듯이 이 두 컬렉션의 주요 차이점은 동시성입니다. HashMap은 스레드로부터 안전하지 않습니다. 반면에 ConcurrentHashMap은 스레드로부터 안전하며 다중 스레드 환경에서 사용하기에 적합합니다.
2 구현 Hashmap과 ConcurrentHashmap은 내부적으로 다르게 구현되는데, Hashmap은 저장 메커니즘에 세그먼트가 있는 경우 개념이 없고 Key Value 쌍으로 데이터를 저장하기 때문입니다. 반면에 동시 HashMap은 초기화 시 [기본값 16] 세그먼트 수로 분할되는 방식으로 Concurerent HashMap을 구현합니다. ConcurrentHashMap을 사용하면 비슷한 수(16)의 스레드가 이러한 세그먼트에 동시에 액세스할 수 있으므로 각 스레드가 높은 동시성 동안 특정 세그먼트에서 작동합니다.
3 도입 HashMap은 JDK 1.2에 도입되었습니다. 반면에 ConcurrentHashMap은 JDK 1.5에서 SUN Microsystem에 의해 도입되었습니다.
4 무효 허용 위에서 언급했듯이 HashMap의 경우 키와 값에 null 값이 허용됩니다. 반면 동시 HashMap에서 null 값은 키나 값에 대해 허용되지 않으며 이러한 항목에 대해 시도하면 NullPointerException을 말하는 런타임 예외가 발생합니다.
5 동기화 HashMap은 동기화가 없기 때문에 동시 HashMap보다 낫습니다. 반면 ConcurrentHashMap은 동시성 수준에 따라 전체 Map을 다른 파티션으로 나누고 전체 Map을 잠그는 대신 특정 부분만 잠그면 스레드 안전성이 달성됩니다.
6 성능 우리는 Hashmap을 Collections.synchornizedMap(HashMap)에 래핑하여 동기화할 수 있습니다. 이 컬렉션은 Map의 모든 수정 작업이 Map 개체에 잠겨 있는 Hashtable과 거의 동일한 컬렉션을 반환합니다. 위에서 언급했듯이 Collections.SynchronizedMap() 메서드를 사용할 필요가 있으며 ConcurrentHashMap은 여전히 ​​둘 이상의 스레드가 맵에 액세스할 수 있는 기회를 제공하여 성능을 향상시키므로 ConcurrentHashMap()이 더 나은 선택입니다.