HashMap, LinkedHashMap 및 TreeMap의 차이점


958

차이점은 무엇이며 HashMap, LinkedHashMap그리고 TreeMap자바는? 세 가지 모두 keySet와와 같이 출력에 차이가 보이지 않습니다 values. HashtableS 는 무엇입니까 ?

Map m1 = new HashMap();
m1.put("map", "HashMap");
m1.put("schildt", "java2");
m1.put("mathew", "Hyden");
m1.put("schildt", "java2s");
print(m1.keySet()); 
print(m1.values()); 

SortedMap sm = new TreeMap();
sm.put("map", "TreeMap");
sm.put("schildt", "java2");
sm.put("mathew", "Hyden");
sm.put("schildt", "java2s");
print(sm.keySet()); 
print(sm.values());

LinkedHashMap lm = new LinkedHashMap();
lm.put("map", "LinkedHashMap");
lm.put("schildt", "java2");
lm.put("mathew", "Hyden");
lm.put("schildt", "java2s");
print(lm.keySet()); 
print(lm.values());

답변:


1160

세 클래스 모두 Map인터페이스를 구현하고 대부분 동일한 기능을 제공합니다. 가장 중요한 차이점은 항목을 반복하는 순서입니다.

  • HashMap반복 순서를 보장하지 않습니다. 새로운 요소가 추가되면 완전히 바뀔 수 있습니다.
  • TreeMapcompareTo()방법 (또는 외부 제공 Comparator) 에 따라 키의 "자연 순서"에 따라 반복됩니다 . 또한 SortedMap이 정렬 순서에 의존하는 메소드가 포함 된 인터페이스를 구현합니다 .
  • LinkedHashMap 항목이 맵에 배치 된 순서대로 반복됩니다.

"해시 테이블" 은 해시 기반 맵의 일반 이름입니다. Java API와 관련 Hashtable하여 컬렉션 프레임 워크가 존재하기 전에 Java 1.1 시절부터 사용되지 않는 클래스입니다. API는 기능을 복제하는 더 이상 사용되지 않는 메소드로 어수선 해지며 메소드가 동기화되므로 성능이 저하되고 일반적으로 쓸모가 없습니다. Hashtable 대신 ConcurrentHashMap 을 사용하십시오 .


2
그렇다면 실제로는 무엇이고 Map, HashMap과 Hashtables의 차이점은 무엇입니까?
Kevin

5
@theband :지도는 인터페이스입니다. HashMap과 Hashtable은 모두이를 구현합니다. 내가 쓴 것처럼 Hashtable은 레거시 클래스입니다.
Michael Borgwardt

98
간의 현저한 차이 HashtableHashMap해시 테이블 "키나 값이 널이 될 수있다"고한다. 이 제약은 후자에 존재하지 않습니다.
aioobe

4
@AshkanN : 예-실제로 정렬을 구현하는 표준 방법입니다. TreeMap에는 Comparator를 사용하는 생성자가 있으며, 제공되지 않은 경우 추가 된 모든 객체가 Comparable을 구현할 것으로 예상합니다.
Michael Borgwardt

4
LinkedHashMap 반복을 삽입 순서 또는 액세스 순서 중 원하는지 선택할 수 있습니다.
lbalazscs

1606

나는 시각적 인 프리젠 테이션을 선호합니다 :

╔══════════════╦═════════════════════╦═══════════════════╦═════════════════════╗
║   Property   ║       HashMap       ║      TreeMap      ║     LinkedHashMap   ║
╠══════════════╬═════════════════════╬═══════════════════╬═════════════════════╣
║ Iteration    ║  no guarantee order ║ sorted according  ║                     ║
║   Order      ║ will remain constant║ to the natural    ║    insertion-order  ║
║              ║      over time      ║    ordering       ║                     ║
╠══════════════╬═════════════════════╬═══════════════════╬═════════════════════╣
║  Get/put     ║                     ║                   ║                     ║
║   remove     ║         O(1)        ║      O(log(n))    ║         O(1)        ║
║ containsKey  ║                     ║                   ║                     ║
╠══════════════╬═════════════════════╬═══════════════════╬═════════════════════╣
║              ║                     ║   NavigableMap    ║                     ║
║  Interfaces  ║         Map         ║       Map         ║         Map         ║
║              ║                     ║    SortedMap      ║                     ║
╠══════════════╬═════════════════════╬═══════════════════╬═════════════════════╣
║              ║                     ║                   ║                     ║
║     Null     ║       allowed       ║    only values    ║       allowed       ║
║ values/keys  ║                     ║                   ║                     ║
╠══════════════╬═════════════════════╩═══════════════════╩═════════════════════╣
║              ║   Fail-fast behavior of an iterator cannot be guaranteed      ║
║   Fail-fast  ║ impossible to make any hard guarantees in the presence of     ║
║   behavior   ║           unsynchronized concurrent modification              ║
╠══════════════╬═════════════════════╦═══════════════════╦═════════════════════╣
║              ║                     ║                   ║                     ║
║Implementation║      buckets        ║   Red-Black Tree  ║    double-linked    ║
║              ║                     ║                   ║       buckets       ║
╠══════════════╬═════════════════════╩═══════════════════╩═════════════════════╣
║      Is      ║                                                               ║
║ synchronized ║              implementation is not synchronized               ║
╚══════════════╩═══════════════════════════════════════════════════════════════╝

14
삽입 순서 외에도 LinkedHashMap은 액세스 순서 (부울 액세스 순서 매개 변수와 함께 생성자를 사용할 때)도 지원합니다.
Eyal Schneider 2014 년

5
이중 연결 버킷? 삽입 / 제거 작업을 위해 버킷을 검색하는 데 불필요한 오버 헤드가 추가된다고 생각합니다 (객체를 넣으려면 올바른 버킷을 검색해야하기 때문입니다). 나는 항상 LinkedHashMap 구현이 Map의 구현과 유사하지만 반복 목적으로 사용되는 "항목 목록"(연결된 목록 일 수 있음)에 약간의 오버 헤드가 있다고 생각했습니다. 확실합니까, shevchyk? 그렇다면, 당신의 진술을 뒷받침하는 온라인 링크를 설명해 주시겠습니까?
Sai Dubbaka

5
@SaiDubbaka LinkedHashMap에는 이중 링크 버킷이 있지만 버킷 테이블 HashMap에도 있습니다. 교체하지 않습니다. 즉, 링크 된 목록이 삽입 순서 (또는 액세스 순서)로만 반복되므로 버킷 액세스는 HashMap에서와 동일한 방식으로 수행됩니다.
Gerardo Lastra

5
그것은 언급 할만큼 가치있을 수 있습니다, 그 O (1) (우리가 일반적으로 O를 호출하지 것이다, 볼 수있는 최상의 시나리오입니다 이 질문에 )
세바스찬 S

4
O (1)이 항상 O (log n)보다 낫지는 않다는 점도 주목할 가치가있다. 키가 매우 긴 경우 BST를 기반으로하는 것이 전체 키에 대해 O (n) 해시를 수행해야하는 것보다 훨씬 빠를 수 있습니다.
기금 모니카의 소송

65

세 가지 모두 고유 키에서 값으로의 맵핑을 나타내므로 Map 인터페이스를 구현합니다 .

  1. HashMap은 키 해싱 을 기반으로하는 맵 입니다. O (1) get / put 작업을 지원합니다. 키가 있어야합니다 의 일관된 구현 hashCode()하고equals() 이 작동 할 수 있습니다.

  2. LinkedHashMap은 HashMap과 매우 유사하지만 항목이 추가되거나 액세스되는 순서에 대한 인식을 추가하므로 반복 순서는 삽입 순서 (또는 구성 매개 변수에 따라 액세스 순서)와 동일합니다.

  3. TreeMap은 트리 기반 매핑입니다. 넣기 / 받기 작업에는 O (log n) 시간이 걸립니다. 아이템은 Comparable 또는 Comparator와 비교 메커니즘을 가지고 있어야합니다. 반복 순서는이 메커니즘에 의해 결정됩니다.


1
따라서 올바르게 이해하면 삽입 순서가 자연 순서와 동일하다는 점을 감안할 때 LinkedHashMap과 TreeMap의 유일한 차이점은 성능입니다.
Moshe Shaham

19
@MosheShaham # 2에서 말했듯 LinkedHashMap이 자연 순서가 아닌 삽입 순서로 반복됩니다. 따라서 (2,5,3)a에 추가 하고 LinkedHashMap각각에 대해 a를 수행하면이 반환 2,5,3됩니다. 가 있다면 2,5,3A를 TreeMap이 돌아갑니다 2,3,5.
grinch

2
트리 맵에는 다른 멋진 트릭도 많이 있습니다. 머리와 꼬리지도처럼.
Thomas Ahle

private TreeMap <String, Integer> mySection2 = 새 TreeMap <> (); mySection2.put ( "abc1", 2); mySection2.put ( "abc2", 5); mySection2.put ( "abc3", 3); for (정수 x : mySection2.values ​​()) {Log.e ( "LOG", "TreeMap ===="+ x); } 이것은 항목이 삽입 된 것과 동일한 순서를 제공합니다. LinkedHashMaps와 어떻게 다른지 제안하십시오.
B.shruti

2
@ B.shruti : 삽입 순서가 키의 사전 순서와 일치하기 때문입니다 ( "abc1", "abc2", "abc3"). 다른 순서로 삽입하더라도 코드는 사전 식 순서에 따라 반복됩니다.
Eyal Schneider

47

다음 다이어그램에서 각 클래스가 클래스 계층 구조에서 어디에 있는지 확인하십시오 ( 더 큰 클래스 ). TreeMap의 구현 SortedMapNavigableMap동안은 HashMap하지 않습니다.

HashTable사용되지 않으며 해당 ConcurrentHashMap클래스를 사용해야합니다. 여기에 이미지 설명을 입력하십시오


38

해시 맵

  • 쌍 값 (키, 값)이 있습니다
  • 중복 키 값 없음
  • 정렬되지 않은 정렬되지 않은
  • 하나의 null 키와 둘 이상의 null 값을 허용합니다

해시 테이블

  • 해시 맵과 동일
  • null 키와 null 값을 허용하지 않습니다

LinkedHashMap

  • 지도 구현의 주문 버전입니다
  • 링크 된 목록 및 해싱 데이터 구조 기반

나무지도

  • 주문 및 분류 버전
  • 해싱 데이터 구조 기반

3
또한 HashTable이 동기화됩니다. 어쨌든, 나는 당신의 대답이 깨끗하고 명확합니다.
Surasin Tancharoen

35

각 맵을 사용할 때의 맵에 대한 내 경험에서 더 많은 정보를 얻을 수 있습니다.

  • HashMap-최상의 성능 (빠른) 구현을 찾을 때 가장 유용합니다.
  • TreeMap (SortedMap 인터페이스)-내가 정의한 특정 순서로 키를 정렬하거나 반복 할 수있을 때 가장 유용합니다.
  • LinkedHashMap-TreeMap 유지 관리 비용을 증가시키지 않으면 서 TreeMap에서 주문 보장의 이점을 결합합니다. (HashMap만큼 빠릅니다). 특히, LinkedHashMap은 또한 removeEldestEntry()메소드 를 대체하여 Cache 오브젝트를 작성하기위한 훌륭한 시작점을 제공합니다 . 이를 통해 정의한 몇 가지 기준을 사용하여 데이터를 만료 할 수있는 캐시 개체를 만들 수 있습니다.

10
정확히 말해 TreeMap은 요소를 순서대로 유지하지 않습니다. 키를 순서대로 유지합니다.
LS

17

세 가지 클래스 HashMap, TreeMapLinkedHashMap구현은 java.util.Map인터페이스 및 값 고유 키의 매핑을 나타냅니다.

해시 맵

  1. A HashMap는 키를 기반으로 한 값을 포함합니다.

  2. 고유 한 요소 만 포함합니다.

  3. 하나의 널 키와 여러 개의 널 값을 가질 수 있습니다.

  4. 순서를 유지 하지 않습니다 .

    public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable

LinkedHashMap

  1. A LinkedHashMap는 키를 기반으로 한 값을 포함합니다.
  2. 고유 한 요소 만 포함합니다.
  3. 하나의 널 키와 여러 개의 널 값을 가질 수 있습니다.
  4. HashMap이 대신 삽입 순서 를 유지하는 것과 같습니다 . // 아래 클래스 감속 참조

    public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>

나무지도

  1. A TreeMap는 키를 기반으로 한 값을 포함합니다. NavigableMap 인터페이스를 구현하고 AbstractMap 클래스를 확장합니다.
  2. 고유 한 요소 만 포함합니다.
  3. 널 키는 가질 수 없지만 여러 널 값을 가질 수 있습니다.
  4. HashMap대신 오름차순 을 유지하는 것과 동일합니다 (키의 자연 순서를 사용하여 정렬).

    public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, Serializable

해시 테이블

  1. Hashtable은 목록의 배열입니다. 각 목록을 버킷이라고합니다. 버킷 위치는 hashcode () 메서드를 호출하여 식별됩니다. Hashtable에는 키를 기반으로하는 값이 포함됩니다.
  2. 고유 한 요소 만 포함합니다.
  3. 널 키 또는 값이 없을 수 있습니다.
  4. 그것은됩니다 동기화 .
  5. 레거시 클래스입니다.

    public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, Serializable

참조 : http://javarevisited.blogspot.in/2015/08/difference-between-HashMap-vs-TreeMap-vs-LinkedHashMap-Java.html


HashMap의 Big-O 표기법은 O (1)이 아니어야합니다. 이것이 가장 좋은 경우이며 해시 테이블에는 최악의 시나리오로 O (n)이 있습니다. 이것은 귀하의 링크에서 지원됩니다.
Haakon Løtveit


@ HaakonLøtveit 나는 또한 실제 코드를 여기에 갈 것을 제안합니다 -grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/…
roottraveller

여전히 최악의 경우 O (n)이라고 말합니다. 그것은 수학적 개념이며 실제로 O (1)가 아니라면 O (1)이라고 말할 수 없습니다. 또한 여기에 정말 좋은 해싱 함수가 있다고 가정합니다. 우리는 클래스 TerribleHashKey와 같은 것을 사용할 수 있다는 것을 의미합니다. {@Override hashCode () {return 4; / * 공정한 주사위 던지기 * /}}에 의해 결정되며 다른 재미있는 물건의 열쇠로 사용하십시오. O (1)의 확률이 높고 O (1)을 갖는 것은 동일하지 않습니다. 사람들은 숙제를 돕기 위해 여기에옵니다. ...의 자신의 성적을 파괴하지 말자)
하콘 Løtveit에게

Java 8에서는 버킷이 8 개 이상인 경우 최악의 O (log (n)) 사례가 있음을 알 수 있습니다. grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk를 참조하십시오 . /… 자세한 내용은.
Haakon Løtveit

14

HashMap은 반복 순서를 보장하지 않습니다. 새로운 요소가 추가되면 완전히 바뀔 수 있습니다. TreeMap은 compareTo () 메소드 (또는 외부 제공 Comparator)에 따라 키의 "자연 순서"에 따라 반복됩니다. 또한이 정렬 순서에 의존하는 메소드가 포함 된 SortedMap 인터페이스를 구현합니다. LinkedHashMap은 항목이 맵에 배치 된 순서대로 반복됩니다.

성능이 어떻게 변하는 지보십시오 .. 여기에 이미지 설명을 입력하십시오

정렬 맵의 구현 인 트리 맵. put, get 및 containsKey 조작의 복잡성은 자연 순서로 인해 O (log n)입니다.


9

@Amit : SortedMap은 인터페이스이지만 인터페이스 TreeMap를 구현하는 클래스입니다 SortedMap. 즉 SortedMap, 구현 자에게 요청 하는 프로토콜을 따르는 경우 의미합니다 . 검색 트리로 구현되지 않은 트리는 트리가 어떤 종류의 트리 일 수 있기 때문에 데이터를 주문할 수 없습니다. 따라서 TreeMap이 정렬 순서와 같이 작동하게하려면 SortedMap을 구현합니다 (예 : 이진 검색 트리-BST, AVL 및 RB 트리와 같은 균형 BST, 심지어 3 차 검색 트리-순서대로 반복 검색에 주로 사용됨).

public class TreeMap<K,V>
extends AbstractMap<K,V>
implements SortedMap<K,V>, Cloneable, Serializable

NUT-SHELL에서 HashMap: 순서없이 O (1)의 데이터를 제공합니다

TreeMap : 2를 기준으로 O (log N)로 데이터를 제공합니다.

LinkedHashMap: 트리에 삽입되는 방식으로 데이터를 저장하는 링크 된 목록 (indexed-SkipList의 생각) 기능이있는 해시 테이블입니다. LRU를 구현하는 데 가장 적합합니다 (최근에 사용 된).


6

다음은 HashMap과 TreeMap의 주요 차이점입니다.

  1. HashMap은 순서를 유지하지 않습니다. 즉, HashMap은 먼저 삽입 된 요소가 먼저 인쇄된다는 보장을 제공하지 않습니다. 여기서 TreeSet과 마찬가지로 TreeMap 요소도 요소의 자연 순서에 따라 정렬됩니다.

  2. 내부 HashMap 구현은 Hashing을 사용하고 TreeMap은 내부적으로 Red-Black 트리 구현을 사용합니다.

  3. HashMap은 하나의 null 키와 많은 null 값을 저장할 수 있습니다. HashMap은 하나의 null 키와 많은 null 값을 저장할 수 있습니다.

  4. HashMap은 get and put, 즉 O (1)과 같은 기본 작업에 대해 일정한 시간 성능을 유지합니다. Oracle docs에 따르면 TreeMap은 get 및 put 메소드에 대해 보장 된 log (n) 시간 비용을 제공합니다.

  5. HashMap의 성능 시간은 대부분의 작업에서 로그 시간 TreeMap에 대해 일정하므로 HashMap은 TreeMap보다 훨씬 빠릅니다.

  6. HashMap은 비교에서 equals () 메소드를 사용하지만 TreeMap은 순서를 유지하기 위해 compareTo () 메소드를 사용합니다.

  7. HashMap은 Map 인터페이스를 구현하고 TreeMap은 NavigableMap 인터페이스를 구현합니다.


5

이들은 동일한 인터페이스의 다른 구현입니다. 각 구현에는 몇 가지 장점과 단점 (빠른 삽입, 느린 검색)이 있으며 그 반대도 있습니다.

세부 사항은 TreeMap , HashMap , LinkedHashMap 의 javadoc을보십시오 .


실제로 해시 테이블은 무엇이고 맵과 다른 점은 무엇입니까?
Kevin

5

해시 맵은 삽입 순서를 유지하지 않습니다.
예. 해시 맵 키를 다음과 같이 삽입하는 경우

1  3
5  9
4   6
7   15
3   10

그것은 그것을 저장할 수 있습니다

4  6
5  9
3  10
1  3
7  15

연결된 해시 맵은 삽입 순서를 유지합니다.

예.
키를 삽입하는 경우

1  3
5  9
4   6
7   15
3   10

그것은 그것을 저장합니다

1  3
5  9
4   6
7   15
3   10

삽입 한 것과 같습니다.

트리 맵은 키를 증가 순서대로 저장합니다. 예.
키를 삽입하는 경우

1  3
5  9
4   6
7   15
3   10

그것은 그것을 저장합니다

1  3
3  10
4   6
5   9
7   15

4
  • 해시지도 :

    • 주문이 유지되지 않습니다
    • LinkedHashMap보다 빠름
    • 객체 힙 저장에 사용
  • LinkedHashMap :

    • LinkedHashMap 게재 신청서가 유지됩니다
    • HashMap보다 느리고 TreeMap보다 빠릅니다.
    • 게재 신청서를 유지하려면 이것을 사용하십시오.
  • 트리 맵 :

    • TreeMap은 트리 기반 매핑입니다
    • TreeMap은 키의 자연스러운 순서를 따릅니다.
    • HashMap 및 LinkedHashMap보다 느림
    • 자연스러운 (기본) 순서를 유지해야하는 경우 TreeMap을 사용하십시오.

1

모두 키-> 값 맵과 키를 반복하는 방법을 제공합니다. 이 클래스들 사이에서 가장 중요한 차이점은 시간 보장과 키 순서입니다.

  1. HashMap은 0 (1) 조회 및 삽입을 제공합니다. 그러나 키를 반복하면 키의 순서는 본질적으로 임의적입니다. 연결된 목록의 배열로 구현됩니다.
  2. TreeMap은 O (log N) 조회 및 삽입을 제공합니다. 키가 정렬되어 있으므로 키를 정렬 된 순서대로 반복해야하는 경우 가능합니다. 즉, 키는 Comparable 인터페이스를 구현해야합니다. TreeMap은 Red-Black Tree에 의해 구현됩니다.
  3. LinkedHashMap은 0 (1) 조회 및 삽입을 제공합니다. 키는 삽입 순서에 따라 정렬됩니다. 이중 연결 버킷으로 구현됩니다.

빈 TreeMap, HashMap 및 LinkedHashMap을 다음 함수에 전달했다고 상상해보십시오.

void insertAndPrint(AbstractMap<Integer, String> map) {
  int[] array= {1, -1, 0};
  for (int x : array) {
    map.put(x, Integer.toString(x));
  }
  for (int k: map.keySet()) {
   System.out.print(k + ", ");
  }
}

각각의 결과는 아래 결과와 같습니다.

HashMap의 경우 내 테스트에서 출력은 {0, 1, -1}이지만 모든 주문이 될 수 있습니다. 주문에 대한 보증은 없습니다.
트리 맵, 출력은 {-1, 0, 1}입니다.
LinkedList, 출력은 {1, -1, 0}입니다.


1

여기에 훌륭한 답변이 많이 있지만, 다양한 설명을 내 자신의 테이블을 제시하고 싶습니다 Map Java 11과 함께 제공되는 구현을 .

테이블 그래픽에 다음과 같은 차이점이 나열되어 있습니다.

  • HashMap는 IS 범용 Map 당신은 특별한 요구 사항이 없을 때 일반적으로 사용.
  • LinkedHashMap확장 HashMap, 다음 동작 추가 : 항목이 처음에 추가 된 순서를 유지합니다 . 키-값 입력 값을 변경해도 순서대로 위치가 변경되지 않습니다.
  • TreeMap또한 순서를 유지하지만 (a) 인터페이스에 정의 된 주요 객체 의 메소드 값을 의미 하는 "자연"순서 를 사용하거나 (b) 구현을 호출합니다 .compareToComparableComparator 제공 을 합니다.
  • NULL 들 : TreeMap않습니다 하지 열쇠로 NULL을 허용 , 동안 HashMap& LinkedHashMap않습니다.
    • 세 가지 모두 NULL 값을 허용합니다.
  • HashTable기존 자바 1, . 수업에 의해 대체되었습니다 ConcurrentHashMap. Javadoc 인용 : ConcurrentHashMap와 동일한 기능 사양을 따르고의 Hashtable각 메소드에 해당하는 메소드 버전을 포함 Hashtable합니다.

기능을 비교 한 Java 11의 맵 구현 표


0

해시 맵
은 하나의 널 키를 포함 할 수 있습니다.

HashMap은 순서를 유지하지 않습니다.

나무지도

TreeMap은 null 키를 포함 할 수 없습니다.

TreeMap은 오름차순을 유지합니다.

LinkedHashMap

LinkedHashMap은 키에 Map이 삽입되는 삽입 순서를 유지하거나 키에 액세스하는 액세스 순서를 유지하는 데 사용할 수 있습니다.

::

1) HashMap 맵 = 새로운 HashMap ();

    map.put(null, "Kamran");
    map.put(2, "Ali");
    map.put(5, "From");
    map.put(4, "Dir");`enter code here`
    map.put(3, "Lower");
    for (Map.Entry m : map.entrySet()) {
        System.out.println(m.getKey() + "  " + m.getValue());
    } 

2) TreeMap 맵 = 새로운 TreeMap ();

    map.put(1, "Kamran");
    map.put(2, "Ali");
    map.put(5, "From");
    map.put(4, "Dir");
    map.put(3, "Lower");
    for (Map.Entry m : map.entrySet()) {
        System.out.println(m.getKey() + "  " + m.getValue());
    }

3) LinkedHashMap 맵 = 새로운 LinkedHashMap ();

    map.put(1, "Kamran");
    map.put(2, "Ali");
    map.put(5, "From");
    map.put(4, "Dir");
    map.put(3, "Lower");
    for (Map.Entry m : map.entrySet()) {
        System.out.println(m.getKey() + "  " + m.getValue());
    }

0

세 가지 중에서 가장 중요한 것은 항목의 순서를 저장하는 방법입니다.

HashMap-항목의 순서를 저장하지 않습니다. 예.

public static void main(String[] args){
        HashMap<String,Integer> hashMap = new HashMap<>();
        hashMap.put("First",1);// First ---> 1 is put first in the map
        hashMap.put("Second",2);//Second ---> 2 is put second in the map
        hashMap.put("Third",3); // Third--->3 is put third in the map
        for(Map.Entry<String,Integer> entry : hashMap.entrySet())
        {
            System.out.println(entry.getKey()+"--->"+entry.getValue());
        }
    }

HashMap에 대한 출력

LinkedHashMap: 입력 한 순서를 저장합니다. 예 :

public static void main(String[] args){
        LinkedHashMap<String,Integer> linkedHashMap = new LinkedHashMap<>();
        linkedHashMap.put("First",1);// First ---> 1 is put first in the map
        linkedHashMap.put("Second",2);//Second ---> 2 is put second in the map
        linkedHashMap.put("Third",3); // Third--->3 is put third in the map
        for(Map.Entry<String,Integer> entry : linkedHashMap.entrySet())
        {
            System.out.println(entry.getKey()+"--->"+entry.getValue());
        }
    }

LinkedHashMap의 출력

TreeMap: 항목을 키의 오름차순으로 저장합니다. 예 :

public static void main(String[] args) throws IOException {
        TreeMap<String,Integer> treeMap = new TreeMap<>();
        treeMap.put("A",1);// A---> 1 is put first in the map
        treeMap.put("C",2);//C---> 2 is put second in the map
        treeMap.put("B",3); //B--->3 is put third in the map
        for(Map.Entry<String,Integer> entry : treeMap.entrySet())
        {
            System.out.println(entry.getKey()+"--->"+entry.getValue());
        }
    }

TreeMap의 출력

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.