2023. 4. 27. 23:25ㆍ개발일지
HashMap은 Map 인터페이스의 구현체 중 하나입니다. 따라서 HashMap은 Map의 기능을 제공하면서 추가적인 특징과 동작을 가지고 있습니다. 이들 사이에는 몇 가지 주요한 차이점이 있습니다:
구현 방식:
Map: Map은 인터페이스로, 자체적인 구현을 가지지 않습니다. 따라서 Map을 구현한 다양한 클래스(예: HashMap, TreeMap)를 사용하여 Map의 기능을 구현합니다.
HashMap: HashMap은 해시 테이블을 사용하여 Map 인터페이스를 구현한 클래스입니다. 해시 함수를 사용하여 키(key)와 값(value)의 쌍을 매핑하고, 배열 내의 버킷에 저장합니다.
순서 보장:
Map: Map 인터페이스는 일반적으로 삽입 순서나 정렬된 순서를 보장하지 않습니다. 이는 구체적인 Map 구현체에 따라 다를 수 있습니다.
HashMap: HashMap은 순서를 보장하지 않습니다. 데이터를 추가한 순서대로 값을 가져올 수 있는 것은 아니며, 내부적으로 해시 함수를 사용하여 키의 해시 코드를 계산하고 버킷에 매핑하기 때문입니다.
동기화:
Map: Map 인터페이스는 기본적으로 스레드 안전하지 않습니다. 여러 스레드가 동시에 Map에 접근하고 수정하는 경우 동기화를 직접 처리해야 합니다.
HashMap: HashMap은 스레드 안전하지 않습니다. 동시에 여러 스레드가 HashMap에 접근하고 수정하려는 경우, 외부에서 동기화 메커니즘을 사용하여 스레드 안전성을 보장해야 합니다.
성능:
Map: Map은 다양한 구현체에 따라 성능 특징이 다릅니다. TreeMap은 정렬된 순서를 유지하므로 삽입, 검색, 삭제에 O(log n)의 시간 복잡도를 가지지만, HashMap은 해시 테이블을 사용하여 평균적으로 O(1)의 시간 복잡도를 가지는 빠른 검색 및 삽입 성능을 제공합니다.
HashMap: HashMap은 해시 테이블의 내부 구조를 활용하여 데이터를 검색하고 삽입하는데 뛰어난 성능을 보입니다. 그러나 데이터가 해시 충돌이 발생하면 성능이 감소할 수 있습니다.
따라서, HashMap은 Map의 구현체 중 하나로, 빠른 검색과 삽입 성능을 제공하는 동시에 순서를 보장하지 않습니다.
'개발일지' 카테고리의 다른 글
05.08 TIL (OOP) (0) | 2023.05.08 |
---|---|
05.01 TIL (SMTP) (0) | 2023.05.01 |
04.27 TDD (0) | 2023.04.27 |
04.16 TIL LINUX 와 권한 (0) | 2023.04.16 |
04.15 TIL (서버) (0) | 2023.04.15 |