반응형
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
반응형