CodeGym /Java Blog /무작위의 /Java의 맵 인터페이스
John Squirrels
레벨 41
San Francisco

Java의 맵 인터페이스

무작위의 그룹에 게시되었습니다

자바 맵 인터페이스란?

Java Map 인터페이스는 Java Collection 프레임워크의 일부이지만 Collection 인터페이스의 하위 유형은 아닙니다. 따라서 목록 또는 다른 컬렉션 객체와 비교하여 다른 방식으로 작동합니다. Map<Key, Value>의 각 요소는 키-값 쌍을 나타냅니다. 키와 값은 모두 일부 개체입니다. 특정 맵의 모든 키는 고유하지만 값은 고유하지 않으므로 중복될 수 있습니다. 고유한 색인을 사용하여 모든 항목을 찾을 수 있는 일종의 사전 또는 온라인 상점 카탈로그와 같은 Java의 Map을 생각할 수 있습니다. 키는 맵 값의 고유 식별자입니다. 예를 들어 Map<String, Item> String은 온라인 상점에서 가져온 일부 항목의 ID입니다. 문서에 따르면 Map에는 다음 하위 인터페이스가 있습니다.
    바인딩 ;
  • ConcurrentMap<K,V> ;
  • ConcurrentNavigableMap<K,V> ;
  • 논리적 메시지 컨텍스트 ;
  • 메시지 컨텍스트 ;
  • NavigableMap<K,V> ;
  • SOAPMessageContext ;
  • SortedMap<K,V> .
그리고 클래스를 구현합니다.
  • 추상지도
  • 속성
  • 인증 제공자
  • ConcurrentHashMap
  • 동시 건너뛰기 목록 맵
  • EnumMap
  • 해시맵
  • 해시 테이블
  • IdentityHashMap
  • LinkedHashMap
  • 프린터 상태 이유
  • 속성
  • 공급자
  • 렌더링힌트
  • 심플바인딩
  • 테이블 형식 데이터 지원
  • 트리맵
  • UI기본값
  • WeakHashMap
  • Java AbstractMap은 대부분의 Map 인터페이스를 구현하는 추상 클래스입니다.
  • Java HashMap은 해시 테이블을 사용하여 키-값 쌍을 저장하기 위한 데이터 구조입니다.
  • Java TreeMap 은 트리, 즉 정렬된 키로 표시하는 데이터 구조입니다.
  • 약한 키가 있는 해시 테이블을 사용하는 WeakHashMap은 더 이상 사용되지 않는 경우 가비지 수집기가 삭제할 수 있는 값을 표시합니다.
  • LinkedHashMap은 요소를 추가하는 순서가 있는 맵이며 삽입 순서에서 반복을 허용합니다.
  • EnumMap은 enum 키와 함께 사용할 AbstractMap 클래스를 확장합니다 .
  • IdentityHashMap은 문서를 비교할 때 참조 동등성 검사를 사용하고 equals() 메서드 대신 == 작업을 사용하여 비교한 키와 매핑합니다.
여기서 우리는 지도 인터페이스의 가장 인기 있는 구현인 HashMap, TreeMap 및 LinkedHashMap에 관심이 있습니다. 그런데 맵 요소의 순서는 특정 구현에 따라 다릅니다. TreeMap과 LinkedHashMap은 요소의 예측 가능한 순서를 가지고 있지만 HashMap은 그렇지 않습니다.

지도 방법

Map의 주요 작업은 요소의 삽입, 제거 및 검색입니다.
  • public Object put(Object key, Object value)는 맵에 요소를 삽입합니다.
  • public void putAll(Map map) 지도 안에 지정된 지도를 삽입합니다.
  • public Object remove(Object key) 지정된 키에 따라 항목을 삭제합니다.
  • public Object get(객체 키)은 지정된 키의 값을 반환합니다.
  • public boolean containsKey(객체 키)는 이 맵에서 지정된 키를 검색합니다.
  • public Set keySet()은 모든 키를 포함하는 Set 보기를 반환합니다.
  • public Set entrySet()는 모든 키와 값이 포함된 Set 보기를 반환합니다.

해시맵이란?

해시맵이란? Map<Key,Value> 인터페이스의 가장 인기 있는 구현입니다. 이 데이터 구조는 해싱 원칙을 기반으로 합니다.

HashMap 작업의 주요 원칙: 해싱

해시맵이 무엇이고 어떻게 작동하는지 이해하기 위해 먼저 해싱 및 해시 함수에 대해 이야기해 보겠습니다. 해시 함수는 수학적 의미의 함수일 뿐입니다. 따라서 일부 입력 값(객체, 데이터 조각)이 있고 함수는 적절한 규칙을 사용하여 이를 출력 값(해시)으로 변환합니다. 꽤 자주 해시는 적절한 길이의 16진수입니다. 변환 프로세스의 규칙은 다를 수 있지만 다음 원칙을 따릅니다.
  1. 특정 입력(객체)에는 특정 해시 코드가 있습니다.
  2. 두 개체가 같으면 해당 해시 코드도 동일합니다. 그 반대는 사실이 아닙니다.
  3. 해시 코드가 다르면 개체가 확실히 같지 않습니다.
  4. 때로는 서로 다른 객체가 동일한 해시 코드를 가질 수 있습니다. 이는 "충돌"이라는 매우 드문 이벤트이며 우수한 품질의 해시 함수는 충돌 가능성을 최소화해야 합니다.
Java에서 모든 개체에는 해시 코드가 있습니다. 모든 Java 객체의 상위 클래스인 Object 클래스의 hashCode 메서드에 의해 계산됩니다. 일반적으로 개발자는 자신의 클래스에 대해 이 메서드를 재정의하고 이와 연결된 메서드를 동일하게 만듭니다.

HashMap: 작동 방식

따라서 모든 Map 구현이 키와 값으로 구성되므로 클래스 HashMap<K,V>입니다. 해싱 원칙을 사용하여 키를 저장합니다. HashMap 키-값 쌍은 "버킷"에 저장되며, 이러한 버킷은 함께 "테이블", 연결된 목록의 내부 배열 및 초기 크기는 16을 구성합니다.. Java의 HashMap은 키의 해시 코드를 사용하여 키/값 쌍이 매핑되어야 하는 버킷을 결정합니다. HashMap의 까다로운 기능은 [] 테이블의 각 셀(버킷)이 하나의 쌍뿐만 아니라 여러 개를 유지한다는 것입니다. 명시적 객체(예: LinkedList)로 저장되지 않고 암시적 체인으로 저장됩니다. 체인은 각 쌍이 다음 쌍에 대한 링크를 저장한다는 사실 때문에 생성됩니다. 즉, 모든 HashMap 쌍이 16개의 체인에 분산되어 있습니다. 새 쌍을 테이블에 넣으면 키의 해시가 고려됩니다. 이 해시는 키 개체에 내장된 해시코드 함수가 아닙니다. 0-15 범위에 있는 것으로 간주됩니다. 쌍은 해시 인덱스와 함께 버킷에 저장된 쌍 체인에 추가됩니다. 이 접근 방식은 검색 가속화를 제공합니다. 키로 쌍을 검색하는 동안 전체 테이블을 살펴볼 필요가 없습니다. 키의 해시를 고려하여 해시 인덱스가 있는 셀에 저장된 체인만 확인합니다. HashMap에 쌍이 너무 많으면 체인이 너무 길어집니다. 그런 다음 배열의 크기가 증가하고 저장된 모든 개체의 해시가 다시 계산되며 새 체인을 따라 흩어집니다.

해시맵 선언

클래스 HashMap 코드로 이동하면 다음 선언을 찾을 수 있습니다.

public class HashMap extends AbstractMap implements Map, Cloneable, Serializable
여기서 K 는 이 맵에 의해 유지되는 키 유형이고 V 는 매핑된 값의 유형입니다. 다음은 코드에 정수 키와 문자열 값이 있는 HashMap 선언의 예입니다.

HashMap<Integer, String> myHashMap = new HashMap<Integer, String>();

HashMap 메소드

다음은 HashMap 메서드 목록입니다.
  • Object get(객체 키)은 지정된 키의 값을 반환합니다.
  • Object put(Key k, Value v)는 지도에 키 값 매핑을 삽입합니다.
  • Object remove(Object key)는 이 맵에서 지정된 키에 대한 매핑을 제거합니다(있는 경우).
  • void clear()는 HashMap에서 모든 키-값 쌍을 제거합니다.
  • Object clone()은 키와 값을 복제하지 않고 이 HashMap 인스턴스의 얕은 복사본을 반환합니다.
  • boolean containsKey(객체 키)는 지정된 키가 맵에서 발견되면 true를 반환하고 그렇지 않으면 false를 반환합니다.
  • boolean containsValue(Object Value)는 지정된 키가 맵에서 발견되면 true를 반환하고 그렇지 않으면 false를 반환합니다.
  • 부울 isEmpty()는 맵이 비어 있으면 true를 반환하고 비어 있으면 false를 반환합니다.
  • Set keySet()은 맵에서 가져온 키 세트를 반환합니다.
  • int size()는 키-값 매핑의 수량을 반환합니다.
  • Collection values()는 지도 값의 모음을 반환합니다.
  • Object remove(Object key)는 지정된 키에 대한 키-값 쌍을 제거합니다.
  • void putAll(Map m)은 지도의 모든 요소를 ​​다른 지도에 복사합니다.

자바 HashMap 예제

작동 방식을 보여주기 위해 Java HashMap 예제로 프로그램을 만들어 보겠습니다.

import java.util.HashMap;
import java.util.Map;
import java.util.Iterator;
import java.util.Set;
 
public class HashMap {
 
   public static void main(String[] args) {
 
       {
 
           // HashMap declaration
           HashMap<Integer, String> myHashMap = new HashMap<Integer, String>();
 
           //Adding elements into HashMap
           myHashMap.put(7, "Johnny");
           myHashMap.put(8, "Ivy");
           myHashMap.put(1, "Rick");
           myHashMap.put(4, "Stan");
           myHashMap.put(3, "Kyle");
 
           //print out the map content using Iterator
           Set set = myHashMap.entrySet();
           Iterator iterator = set.iterator();
           while (iterator.hasNext()) {
               Map.Entry mapEntry = (Map.Entry) iterator.next();
               System.out.print("key: " + mapEntry.getKey() + " value: ");
               System.out.println(mapEntry.getValue());
           }
           System.out.println("get an element from myHashMap via key and print the value out:");
           System.out.println(myHashMap.get(8));
           //print out hashMap on standard way:
           System.out.println(myHashMap);
 
           // Get values based on key
           String var = myHashMap.get(2);
           //here we'll get null, we don't have such a key
           System.out.println("Value with key 2: " + var);
           var = myHashMap.get(7);
           System.out.println("Value with key 7: " + var);
 
           // Remove values based on key
           myHashMap.remove(4);
           System.out.println("myHashMap after removing element:");
           System.out.println(myHashMap);
           myHashMap.clear();
           System.out.println("myHashMap after total clearing:");
           System.out.println(myHashMap);
       }
 
   }
}
프로그램 실행 결과:

key: 1 value: Rick
key: 3 value: Kyle
key: 4 value: Stan
key: 7 value: Johnny
key: 8 value: Ivy
get an element from myHashMap via key and print the value out:
Ivy
{1=Rick, 3=Kyle, 4=Stan, 7=Johnny, 8=Ivy}
Value with key 2: null
Value with key 7: Johnny
myHashMap after removing element:
{1=Rick, 3=Kyle, 7=Johnny, 8=Ivy}
myHashMap after total clearing:
{}

트리맵

Java의 TreeMap도 Map<Key,Value> 인터페이스를 구현하지만 Red-Black 트리 데이터 구조를 기반으로 합니다. 트리는 "노드"와 노드를 연결하는 선-가지"로 구성됩니다. "루트" 노드는 트리의 맨 위에 있습니다. 루트에서 가지와 노드가 있을 수 있습니다. 계층 구조입니다. 이러한 노드는 루트의 "자식"입니다. 자식 노드는 하위 노드인 자체 자식을 가질 수 있습니다. 자식이 없는 노드는 "끝 노드" 또는 "잎"이라고 합니다. 이진 트리는 모든 노드가 0, 1인 트리입니다. 이진 검색 트리는 모든 내부 노드가 키와 때로는 관련 값을 저장하고 두 개의 고유한 하위 트리("왼쪽" 및 "오른쪽")가 있는 구조입니다. 자체 균형 이진 검색 트리는 임의의 항목 삽입 및 삭제에 직면하여 자동으로 높이(루트 아래의 최대 수준 수)를 작게 유지하는 노드 기반 이진 검색 트리입니다. 레드-블랙 트리는 다음과 같은 속성을 가진 균형 잡힌 이진 트리입니다.
  • 모든 노드는 빨강 또는 검정입니다.
  • 뿌리는 항상 검은색
  • 모든 잎은 NIL(빈 종류의 null) 노드이며 검은색입니다.
  • 노드가 빨간색이면 그 자식은 확실히 검은색입니다.
  • 노드에서 하위 리프까지의 모든 단순 경로에는 동일한 수의 블랙 노드가 포함됩니다.

TreeMap 기능

TreeMap은 트리 데이터 구조를 사용하여 키를 노드로 저장하고 Red-Black Tree 알고리즘을 사용하여 키를 정렬합니다. 따라서 TreeMap은 키의 자연스러운 순서에 따라 정렬된 항목을 유지합니다. 자연수는 오름차순, 문자열은 알파벳순입니다. 순서 논리를 변경해야 하는 경우 비교기를 사용할 수 있습니다. 자연스러운 방식으로 개체를 정렬하는 것은 TreeMap의 큰 장점일 뿐만 아니라 다른 필터와 조건을 사용하여 일부 개체를 찾는 것입니다.

TreeMap 메서드

  • Object get(객체 키)은 해당 키의 값을 반환합니다.
  • Object put(객체 키, 객체 값)은 맵에 매핑을 삽입합니다.
  • Object remove(Object key)는 TreeMap에 포함된 경우 이 키에 대한 매핑을 제거합니다.
  • boolean containsKey(객체 키)는 이 지도에 지정된 키에 대한 매핑이 포함되어 있으면 true를 반환합니다.
  • boolean containsValue(Object value)는 TreeMap이 하나 이상의 키를 지정된 값에 매핑하는 경우 true를 반환합니다.
  • 객체 firstKey()는 현재 정렬된 맵에 있는 첫 번째 키를 반환합니다.
  • 객체 lastKey()는 현재 정렬된 맵에 있는 마지막 키를 반환합니다.
  • void putAll(Map map)은 지정된 지도에서 지도로 모든 매핑을 복사합니다.
  • Set entrySet()은 매핑의 집합 보기를 반환합니다.
  • int size()는 키-값 매핑의 수량을 반환합니다.
  • 컬렉션 값()은 값의 컬렉션 보기를 반환합니다.
  • Object clone()은 TreeMap의 얕은 복사본을 반환합니다.
  • void clear()는 TreeMap에서 모든 매핑을 제거합니다.
  • SortedMap headMap(객체 key_value) 매개 변수 key_value보다 작은 맵 부분의 뷰를 반환합니다.
  • Set keySet()은 트리맵에 포함된 키의 Set 보기를 반환합니다.
  • SortedMap subMap(K fromKey, K toKey) 키 범위가 fromKey(포함)에서 toKey(제외)인 이 맵 부분의 보기를 반환합니다.
  • 객체 firstKey()는 TreeMap에서 첫 번째 키를 반환합니다.

트리맵 예


import java.util.TreeMap;
import java.util.Set;
import java.util.Iterator;
import java.util.Map;
 
public class TreeMapExample {
 
   public static void main(String args[]) {
 
       //TreeMap declaration
       TreeMap<Integer, String> myTreeMap = new TreeMap<Integer, String>();
 
       //put elements to TreeMap
       myTreeMap.put(1, "Stuart");
       myTreeMap.put(23, "Michael");
       myTreeMap.put(7, "Johnny");
       myTreeMap.put(5, "Ivy");
       myTreeMap.put(2, "Alex");
 
       //Display and print out myTreeMap using Iterator
       Set set = myTreeMap.entrySet();
       Iterator iterator = set.iterator();
       while (iterator.hasNext()) {
           Map.Entry myEntry = (Map.Entry) iterator.next();
           System.out.print("key: " + myEntry.getKey() + " value: ");
           System.out.println(myEntry.getValue());
       }
       //TreeMap printed in classical way
       System.out.println(myTreeMap);
       //removing an element with the key =2
       myTreeMap.remove(2);
       //myTreeMap after removing:
       System.out.println(myTreeMap);
   }
}
프로그램 실행 결과:

key: 1 value: Stuart
key: 2 value: Alex
key: 5 value: Ivy
key: 7 value: Johnny
key: 23 value: Michael
{1=Stuart, 2=Alex, 5=Ivy, 7=Johnny, 23=Michael}
{1=Stuart, 5=Ivy, 7=Johnny, 23=Michael}

LinkedHashMap

LinkedHashMap은 연결 목록과 해시 맵을 결합한 데이터 구조입니다. 실제로 LinkedHashMap은 HashMap 클래스를 확장하고 Map 인터페이스를 구현하지만 연결된 목록은 무엇입니까? LinkedHashMap의 선언:

Map <Integer, String> linkedHashMap = new LinkedHashMap <Integer, String>();
이 새로운 linkedHashMap은 HashMap에서 속성(예: 테이블, loadFactor, 임계값, 크기, entrySet)을 상속하고 두 가지 특수 속성도 가져옵니다.
  • 헤더는 이중 연결 리스트의 헤드입니다. 초기화하는 동안 자신을 나타냅니다.
  • accessOrder는 iterator를 사용하여 요소에 액세스하는 방법을 나타냅니다. true인 경우 마지막 액세스 순서대로. false인 경우 요소가 삽입된 순서대로 액세스됩니다.
이 연결 목록은 반복 순서를 정의합니다. 일반적으로 맵에 키를 삽입하는 순서입니다.

LinkedHashMap 메서드

  • Object get(객체 키)은 지정된 키가 매핑된 값을 반환하거나, 이 맵에 키에 대한 매핑이 포함되어 있지 않으면 null을 반환합니다.
  • void clear()는 맵에서 모든 매핑을 제거합니다.
  • boolean containsKey(객체 키)는 지정된 요소가 하나 이상의 키에 매핑된 경우 true를 반환합니다.
  • 부울 removeEldestEntry(Map.Entry eldest)는 맵이 맵에서 가장 오래된 항목을 제거하는 경우 true를 반환합니다.
  • Set<Map.Entry<K,V>> entrySet()는 이 맵에 포함된 매핑의 Set 보기를 반환합니다.
  • void forEach(BiConsumer<? super K,? super V> action)는 모든 항목이 처리되거나 작업이 예외를 throw할 때까지 이 맵의 각 항목에 대해 지정된 작업을 수행합니다.
  • Object getOrDefault(Object key, V defaultValue)는 지정된 키가 매핑된 값을 반환합니다. 맵에 키에 대한 매핑이 포함되어 있지 않으면 defaultValue를 반환합니다.
  • Set<K> keySet()는 맵에 포함된 키의 Set 보기를 반환합니다.
  • 부울 removeEldestEntry(Map.Entry<K,V> eldest)는 이 맵이 가장 오래된 항목을 제거해야 하는 경우 true를 반환합니다.
  • void replaceAll(BiFunction<? super K,? super V,? extends V> function)은 모든 항목이 처리되거나 함수가 예외를 throw할 때까지 해당 항목에서 지정된 함수를 호출한 결과로 각 항목 값을 바꿉니다.
  • Collection<v>values()는 지도에 포함된 값의 Collection 보기를 반환합니다.

LinkedHashMap 예


import java.util.LinkedHashMap;
import java.util.Set;
import java.util.Iterator;
import java.util.Map;
   public class HashLinkedListExample {
       public static void main(String args[]) {
           // LinkedHashMap Declaration
           LinkedHashMap<Integer, String> myLinkedHashMap =
                   new LinkedHashMap<Integer, String>();
 
           //Adding elements into LinkedHashMap
           myLinkedHashMap.put(7, "Johnny");
           myLinkedHashMap.put(12, "Rick");
           myLinkedHashMap.put(1, "Kyle");
           myLinkedHashMap.put(5, "Percy");
           myLinkedHashMap.put(85, "Sebastian");
 
           // Generate a Set of entries
           Set set = myLinkedHashMap.entrySet();
 
           // Display and print out the nodes  of LinkedHashMap
           Iterator iterator = set.iterator();
           while(iterator.hasNext()) {
               Map.Entry me = (Map.Entry)iterator.next();
               System.out.print("key: "+ me.getKey() +
                       " value: "+me.getValue()+"\n");
           }
           //print out HashLinkedMap on standard way:
           System.out.println(myLinkedHashMap);
           myLinkedHashMap.put(21, "Ivy");
           System.out.println(myLinkedHashMap);
           myLinkedHashMap.remove(12);
           System.out.println(myLinkedHashMap);
           myLinkedHashMap.put(12, "Ronny");
           System.out.println(myLinkedHashMap);
           myLinkedHashMap.put(1, "Stan");
           System.out.println(myLinkedHashMap);
       }
   }
여기에서 새로운 LinkedHashMap을 생성하고 5개의 요소를 추가한 다음 반복자를 사용하여 고전적인 방식으로 출력합니다. 보시다시피 LinkedHashMap은 삽입 순서를 유지합니다. 그런 다음 맵에서 요소를 삭제한 다음 새 요소를 추가하고 나중에 이미 맵에 있는 키가 있는 요소를 하나 더 추가합니다. 이 키에 매핑된 이전 값을 대체합니다. 프로그램 실행 결과:

key: 7 value: Johnny
key: 12 value: Rick
key: 1 value: Kyle
key: 5 value: Percy
key: 85 value: Sebastian
{7=Johnny, 12=Rick, 1=Kyle, 5=Percy, 85=Sebastian}
{7=Johnny, 12=Rick, 1=Kyle, 5=Percy, 85=Sebastian, 21=Ivy}
{7=Johnny, 1=Kyle, 5=Percy, 85=Sebastian, 21=Ivy}
{7=Johnny, 1=Kyle, 5=Percy, 85=Sebastian, 21=Ivy, 12=Ronny}
{7=Johnny, 1=Stan, 5=Percy, 85=Sebastian, 21=Ivy, 12=Ronny}

HashMap, TreeMap, LinkedHashMap 비교

HashMap, TreeMap 및 LinkedHashMap은 Map 인터페이스의 구현입니다. HashMap 및 LinkedHashMap은 키를 해시하는 데이터 구조입니다. TreeMap은 키의 자연스러운 순서를 사용하여 검색 트리를 구성합니다. 주문하다:
  • HashMap은 순서를 유지하지 않습니다.
  • TreeMap은 키의 오름차순으로 항목을 정렬합니다.
  • LinkedHashMap은 삽입 순서를 유지합니다.
널 키:
  • HashMap 및 LinkedHashMap은 하나의 널 키를 허용합니다.
  • LinkedHashMap은 키가 자연 순서를 사용하거나 Comparator가 null ley에 대한 비교를 지원하지 않는 경우 null 키를 허용하지 않습니다.
이 문서에서 검토한 세 가지 구현을 모두 포함하는 Java 맵 예제를 살펴보겠습니다.

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.TreeMap;
 
public class CompMapImpl {
 
 
    public static void main(String[] args) {
        HashMap<Integer, String> hashMap = new HashMap<>();
        TreeMap<Integer, String> treeMap = new TreeMap<>();
        LinkedHashMap<Integer, String> linkedHashMap = new LinkedHashMap<>();
        hashMap.put(5, "Ivy");
        hashMap.put(null, "Joker");
        hashMap.put(1, "First");
        hashMap.put(2, "Kyle");
        hashMap.put(-2, "Paul");
        hashMap.put(3, "Sandy");
 
 
        treeMap.put(5, "Ivy");
        //treeMap.put(null,"Joker");
        treeMap.put(1, "First");
        treeMap.put(2, "Kyle");
        treeMap.put(-2, "Paul");
        treeMap.put(3, "Sandy");
 
        linkedHashMap.put(5, "Ivy");
        linkedHashMap.put(null, "Joker");
        linkedHashMap.put(1, "First");
        linkedHashMap.put(2, "Kyle");
        linkedHashMap.put(-2, "Paul");
        linkedHashMap.put(3, "Sandy");
        System.out.println("HashMap");
        System.out.println(hashMap);
        System.out.println("TreeMap");
        System.out.println(treeMap);
        System.out.println("LinkedHashMap");
        System.out.println(linkedHashMap);
 
 
        LinkedHashMap<String, String> linkedHashMap1= new LinkedHashMap<> ();
        linkedHashMap1.put(null, "Andy");
        System.out.println(linkedHashMap1);
    }
}
이 프로그램을 실행한 결과는 다음과 같습니다.

HashMap
{null=Joker, 1=First, -2=Paul, 2=Kyle, 3=Sandy, 5=Ivy}
TreeMap
{-2=Paul, 1=First, 2=Kyle, 3=Sandy, 5=Ivy}
LinkedHashMap
{5=Ivy, null=Joker, 1=First, 2=Kyle, -2=Paul, 3=Sandy}
{null=Andy}
보시다시피 HashMap의 요소 순서는 명확하지 않습니다. treeMap에서는 키에 의존하고 LinkedHashMap에서는 삽입 순서에 관한 것입니다. null 키를 linkedHashMap에 넣으려고 하면 NullPointerException이 발생하지만 키가 String인 linkedHashMap1에서는 가능합니다. 해시 맵은 최고의 범용 맵 구현입니다. 최대 검색 속도, 빠른 저장 및 검색 작업을 제공하지만 혼란스러운 순서를 기억해야 합니다. 연결된 해시 맵은 HashMap의 장점을 상속하고 키에 대한 순서를 가져옵니다. 그러나 메모리 측면에서 상대적으로 비용이 많이 드는 linkedList가 포함되어 있습니다. HashMap에 비해 검색이 느리고 추가/제거는 연결 리스트를 유지하기 때문에 조금 느립니다. 트리 맵은 오름차순으로 정렬된 키를 저장합니다. 하지만, 배운 내용을 보강하려면 Java 과정에서 비디오 강의를 시청하는 것이 좋습니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION