Map Interface
Map Interface
HashMap
예제 코드
public static void main(String[] args) {
Map<String, String> mapTest = new HashMap<>();
mapTest.put("Facebook", "USA5");
mapTest.put("Facebook1", "USA4");
mapTest.put("Facebook2", "USA3");
mapTest.put("Facebook3", "USA2");
mapTest.put("Facebook4", "USA1");
for (Map.Entry<String, String> entry : mapTest.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
/**
* Facebook1:USA4
* Facebook:USA5
* Facebook4:USA1
* Facebook3:USA2
* Facebook2:USA3
*/
[ 특징 ]
• 순서가 보장되지 않는다.
• hasCode()
메서드를 사용해서 데이터를 저장한다.
• 다른 map에 비해 빠른 탐색 시간을 갖는다.
• O(1)
의 시간복잡도를 갖는다.
• 다중 쓰레드 환경에서 Thread Safe 하지 않기 때문에 synchronized 처리가 필요하다. (관련 포스팅)
TreeMap
예제 코드
[Comparator X]
public static void main(String[] args) {
Map<String, String> mapTest = new TreeMap<>();
mapTest.put("Facebook", "USA5");
mapTest.put("Facebook1", "USA4");
mapTest.put("Facebook2", "USA3");
mapTest.put("Facebook3", "USA2");
mapTest.put("Facebook4", "USA1");
for (Map.Entry<String, String> entry : mapTest.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
/**
* Facebook:USA5
* Facebook1:USA4
* Facebook2:USA3
* Facebook3:USA2
* Facebook4:USA1
*/
[Comparator O]
public static void main(String[] args) {
Map<String, String> mapTest = new TreeMap<>(Comparator.reverseOrder());
mapTest.put("Facebook", "USA5");
mapTest.put("Facebook1", "USA4");
mapTest.put("Facebook2", "USA3");
mapTest.put("Facebook3", "USA2");
mapTest.put("Facebook4", "USA1");
for (Map.Entry<String, String> entry : mapTest.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
/**
* Facebook4:USA1
* Facebook3:USA2
* Facebook2:USA3
* Facebook1:USA4
* Facebook:USA5
*/
[ 특징 ]
• 입력된 key-value 쌍을 내부적으로 RedBlack-Tree로 저장하여 관리한다.
• 탐색, 추가, 삭제 모두 O(logN)
의 시간복잡도를 갖는다.
• Comparator 인터페이스를 구현해서 사용자가 정렬된 순서를 조정할 수 있다.
• HashMap과 비교하면 좀 더 느린 속도를 갖는다.
LinkedHashMap
예제 코드
public static void main(String[] args) {
Map<String, String> mapTest = new LinkedHashMap<>();
mapTest.put("Facebook", "USA5");
mapTest.put("Facebook1", "USA4");
mapTest.put("Facebook2", "USA3");
mapTest.put("Facebook3", "USA2");
mapTest.put("Facebook4", "USA1");
for (Map.Entry<String, String> entry : mapTest.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
/**
* Facebook:USA5
* Facebook1:USA4
* Facebook2:USA3
* Facebook3:USA2
* Facebook4:USA1
*/
[ 특징 ]
• 키의 순서는 삽입한 순서대로 정렬되어 있다.
• Double-linked List
로 구현되어 있다.
• 모든 Map의 동작들을 제공하며 null 역시 허용한다.
• HashMap과 마찬가지로 동기화 처리가 되어있지 않기 때문에 Thread-Safe 하지 않다.
[ Double-linked List ] 설명
HashTable
[ 특징 ]
• HashMap의 특징을 가지고 있다.
• HashMap보다는 느리다. 하지만 동기화된 HashMap 보다는 빠르다.
• null key, null value 모두 혀용하지 않는다.
• 동기화를 지원한다 = Thread Safe하다