안드로이드 프로그래밍을 하면서 Map을 사용하게 되는 경우가 종종 있는데요.
Java 에서 제공해주는 Map에는 HashMap, TreeMap, LinkedHashMap 이 있는데요.
이들에 대해서 한번 정리해보겠습니다.
1. HashMap
HashMap의 소스코드는 길어서 다 볼수는 없지만, 간단한 주석이 들어있는 앞부분을 참조해보겠습니다.
눈이 띄는 부분들을 정리해보면 다음과 같네요.
- 인자로, null값이 허용되는 key,value값을 <K,V>로 허용한다.
- 해쉬맵의 순서는 정해져있지 않으므로, 정해진 순서대로 iterate을 하고 싶다면, LinkedHashMap을 사용할 것
- 여러 워커 쓰레드를 사용하는 경우, 자동으로 동기화되지 않으므로, synchronized를 해야할 필요가 있다.
- Serializable을 사용하므로, Intent로 넘기기에도 유용하다.
아무래도 가장 큰 특징은 순서대로 iterate이 않되므로, 입력한 대로 출력이 않된다는 부분인데요.
어떤 Map을 사용할지 고민할 때, 고려해야 중요한 요소라고 할 수 있습니다.
2. TreeMap
3. LinkedHashMap
이제, 마지막 LinkedHashMap에 대해서 알아보겠습니다.
아래에서 소스의 주석설명을 보겠습니다.
눈에 띄는 점들은 다음과 같은데요.
- doulbly-linked list로 저장됨(linked-list 자료구조로 저장된다는 거군요.)
- linked-list므로 당연하게도, 넣은 순서대로 빠져나옵니다.
- HashMap과 마찬가지로 다중쓰레드 사용시에 synchronized가 되지 않습니다.
가장 중요한 것은 linked-list구조를 사용한 것과, 들어가 순서대로, iterate이 되서, 출력이 된다는 점입니다.
4. 정리
HashMap, TreeMap, LinkedHashMap 셋 다, Map interface를 implement하고 있으므로, 대부분 같은 기능을 제공하는데요.
가장 큰 차이점으로는 iteration해서 출력하는 순서라고 할 수 있습니다.
HashMap이 순서가 보장되지 않는다면, TreeMap은 유저가 정한 순서나, Key값의 Natural Order를 따르구요,
LinkedHashMap은 put이 된 순서되로 iteration되고 출력한다고 할 수 있습니다.
HashMap과 LinkedHashMap이 O(1) 의 검색성능을, TreeMap이 O(log(n)) 의 검색성능을 가지므로,
sorting을 특정 조건으로 할 이유가 없다면, HashMap이나 LinekdHashMap을 사용하는 것이 좋을 것 같습니다.
'Android 개발 > Java, Java8' 카테고리의 다른 글
Enum값에 대해서 알아보겠습니다 (0) | 2018.04.10 |
---|---|
정규 표현식 (Regular Expression) 과 응용 사례를 정리해 보자 (1) | 2017.09.07 |
Math 클래스 의 반올림, 올림, 버림 등 자주 사용하는 메소드 정리 #Java (0) | 2017.04.09 |
Matcher 클래스와 Pattern Class로 정규 표현식을 활용해보자 (0) | 2017.03.22 |
Java 배열 및 ArrayList 를 Comparable과 Comparator 를 이용해 정렬하기 (0) | 2017.03.19 |
Bit 논리 연산과 시프트 연산 의 정리 (0) | 2017.03.16 |
Java Wrapper 클래스 를 정리해 보자 (0) | 2017.03.07 |
Java의 3항 연산자는 알아야, 소스코드도 보인다 (0) | 2017.01.21 |
Java IO에서 InputStream, OutputStream, Reader, Writer (0) | 2017.01.07 |
JAVA Interface 안드로이드를 위한 자바 인터페이스 #다중상속 #콜백 (0) | 2016.12.21 |
댓글