[java] HashMap vs LinkedHashMap

반응형

1. 문제 인식

실무에서 기존에 작성되어있는 코드해석을 할때 HashMap 과 LinkedHashMap 을 둘 다 접하게됐다. key 로 value 값을 찾는, 별 다를것 없이 같은 상황이라고 생각했는데, 왜 이 경우에는 HashMap 을 쓰고, 이 경우에는 LinkedHashMap 을 생성해서 처리해놨을까? 하는 의문에서 출발하게 됐다.

 

HashMap 과 LinkedHashMap 의 차이는 무엇일까?

 

2. Map

Map 은 key 와 value 가 한 쌍으로 이루어진 자료구조이다.

  • key 와 value 의 한 쌍으로 순서를 가지지 않는다.
  • key 는 중복을 허용하지 않는다.

 

3. HashMap

예제

@Test
void hashMap() {
    // HashMap 생성
    Map<String, String> hashMap = new HashMap<>();
    // 데이터 설정
    hashMap.put("12월", "december");
    hashMap.put("06월", "june");
    hashMap.put("04월", "april");
    hashMap.put("10월", "october");
    hashMap.put("05월", "may");
    // 전체 출력
    Iterator<String> iter = hashMap.keySet().iterator();
    while (iter.hasNext()) {
        String key = iter.next();
        System.out.println("key = " + key + ", value = " + hashMap.get(key));
    }
    System.out.println("hashMap.toString() = " + hashMap.toString()
}

출력결과

key = 04월, value = april
key = 12월, value = december
key = 10월, value = october
key = 05월, value = may
key = 06월, value = june
hashMap.toString() = {04월=april, 12월=december, 10월=october, 05월=may, 06월=june}

출력된 결과를 보면, 데이터를 삽입한 순서대로 출력되지 않는 것을 확인할 수 있다.

 

4. LinkedHashMap

예제 (HashMap 예제와 데이터는 같다. 다른부분은 Map 을 LinkedHashMap 으로 생성한 것 뿐이다.)

@Test
void linkedHashMap() {
    Map<String, String> linkedHashMap = new LinkedHashMap<>();
    linkedHashMap.put("12월", "december");
    linkedHashMap.put("06월", "june");
    linkedHashMap.put("04월", "april");
    linkedHashMap.put("10월", "october");
    linkedHashMap.put("05월", "may");
    Iterator<String> iter = linkedHashMap.keySet().iterator();
    while (iter.hasNext()) {
        String key = iter.next();
        System.out.println("key = " + key + ", value = " + linkedHashMap.get(key));
    }
    System.out.println("linkedHashMap.toString() = " + linkedHashMap.toString());
}

출력결과

key = 12월, value = december
key = 06월, value = june
key = 04월, value = april
key = 10월, value = october
key = 05월, value = may
linkedHashMap.toString() = {12월=december, 06월=june, 04월=april, 10월=october, 05월=may}

출력된 결과를 보면, 데이터를 삽입한 순서대로 출력되는 것을 확인할 수 있다.

 

5. HashMap vs LinkedHashMap 정리

가장 큰 차이는 데이터가 삽입된 순서의 유지되는가이다.

정리하면, 아래와 같이 사용하자.

  • 특별한 사유가 없다면 HashMap
  • 순서보장이 요구된다면 LinkedHashMap
반응형