"마지막으로 지도에 대해 말씀드리겠습니다."
"아시다시피 지도는 키-값 쌍 세트를 저장합니다. 키는 고유해야 하지만 값은 무엇이든 될 수 있습니다. 키-값 쌍을 지도에 추가하고 컬렉션에 이미 키가 포함되어 있으면 이전 값은 새 값으로 대체됩니다. 즉 , 키는 모든 개체가 될 수 있는 특수 인덱스처럼 작동합니다 ."
맵은 (x, y) 쌍의 집합을 나타내는 수학 용어이며 각 고유 x는 일부 y에 해당합니다.
프로그래머는 Map을 매우 좋아하므로 여기서는 Map 인터페이스를 구현하는 4가지 컬렉션을 제시합니다.
"간단한 상속 구조는 다음과 같습니다."
"노란색은 Entry 가 Map 인터페이스 의 중첩된 인터페이스임을 나타냅니다 ."
"요소 쌍을 단일 엔터티로 설명하기 위해 항목이 추가되었습니다."
"Map<K,V>의 방법은 다음과 같습니다."
행동 양식 | 설명 |
---|---|
int size() |
맵의 쌍 수를 반환합니다. |
boolean isEmpty() |
맵이 비어 있는지 확인합니다. |
boolean containsKey(Object key) |
맵에 지정된 키가 포함되어 있습니까? |
boolean containsValue(Object value) |
맵에 지정된 값이 포함되어 있습니까? |
V get(Object key) |
지정된 키의 값을 반환합니다. |
V put(K key, V value) |
키의 새 값을 설정합니다. 메서드는 이전 값 또는 null을 반환합니다. |
putAll(Map<? extends K, ? extends V> m) |
다른 맵에서 쌍을 추가합니다. |
void clear() |
맵을 지웁니다. 즉, 모든 쌍을 제거합니다. |
Set<K>keySet() |
키 집합을 반환합니다. |
Collection<V>values() |
값 모음을 반환합니다. |
Set<Map.Entry<K, V>>entrySet() |
쌍의 집합을 반환합니다. |
"K와 V는 키와 값의 유형 매개변수입니다."
"글쎄, 나는 대부분의 방법에 익숙하지만 그 중 일부만 사용했습니다."
"엔트리 클래스에 대해 무엇을 더 말씀해 주시겠습니까?"
"이 클래스는 한 쌍의 요소를 설명합니다. 몇 가지 메서드가 있습니다."
행동 양식 | 설명 |
---|---|
K getKey() |
키-값 쌍의 키를 반환합니다. |
V getValue() |
키-값 쌍의 값을 반환합니다. |
V setValue(V value) |
키-값 쌍에 새 값을 설정합니다. |
"맵 전체를 거치지 않고 한 쌍을 메서드에 전달할 수 있어 진입이 편리합니다."
"알겠어요."
"이제 지도 구현에 대해 살펴보겠습니다."
"첫 번째는 HashMap 입니다 . 해시 테이블을 사용하여 요소를 저장합니다. 키와 값은 null뿐만 아니라 모든 유형일 수 있습니다. 요소의 순서는 컬렉션이 변경될 때 변경될 수 있습니다 ."
"요소는 HashMap에 그룹 또는 버킷 세트로 저장됩니다. 요소의 hashCode() 메서드는 요소가 속하는 버킷을 결정합니다."
"매우 대략적으로 말하면 1에서 100까지의 해시 코드를 가진 요소는 첫 번째 버킷에 속하고 101에서 200까지의 값을 가진 요소는 두 번째 버킷에 속합니다."
"이러한 방식으로 요소를 저장하는 포인트는 요소를 검색하거나 제거할 때 관련 없는 버킷의 모든 요소를 제거할 수 있다는 것입니다."
"알겠어요."
"HashMap에 대한 정말 좋은 기사가 있습니다. 읽어 보시기 바랍니다: https://medium.com/@mr.anmolsehgal/java-hashmap-internal-implementation-21597e1efec3 "
"두 번째 컬렉션은 LinkedHashMap 입니다. HashMap과의 주요 차이점은 항목을 연결된 목록으로 저장한다는 것입니다. 일반 HashMap에서는 요소의 순서가 정의되지 않으며 시간이 지남에 따라 변경될 수 있습니다. 그리고 LinkedHashMap에서 반복자를 가져올 수 있습니다. LinkedHashMap에 추가된 순서대로 모든 요소를 탐색하는 데 사용합니다. 또한 LinkedHashMap에는 마지막 사용/활동 순서대로 모든 쌍을 탐색할 수 있는 반복자가 있습니다."
"LinkedHashMap에 대한 정말 좋은 기사가 있습니다. 여기 있습니다: https://medium.com/@mr.anmolsehgal/java-linkedhashmap-internal-implementation-44e2e2893036 "
"오늘 이야기하고 싶은 세 번째 컬렉션은 TreeMap 입니다 ."
" TreeMap은 요소를 오름차순으로 정렬된 상태로 유지합니다. 이는 TreeMap이 균형 잡힌 레드-블랙 트리를 사용하여 요소를 저장하기 때문에 가능합니다."
"결과적으로 삽입 시간과 검색 시간이 매우 짧습니다. 이 클래스는 매우 많은 양의 데이터를 사용할 때 탁월한 선택입니다."
"물론 TreeMap에 대한 기사도 있습니다. https://medium.com/xebia-engineering/treemap-internals-199e0e0050b5 "
"내가 아직 말하지 않은 것은 무엇입니까?"
"WeakHashMap이지만 Rishi는 며칠 전에 그것에 대해 이야기했습니다."
"언제였어?"
"그가 SoftReference, WeakReference 및 PhantomReference에 대해 이야기했을 때."
"당신이 이름을 모두 올바르게 지었다는 것을 고려하면 당신을 믿습니다. 그럼 편안히 쉬십시오. 오늘 밤에 뵙겠습니다."
"안녕, 엘리."
GO TO FULL VERSION