Map
은 Key
와 Value
로 이루어져 있으며, java.util 패키지 하위의 인터페이스이다.
return type | method & args | description |
---|---|---|
V | put(K key, V value) | 첫 번째 매개 변수인 키를 갖는, 두 번재 매개변수인 값을 갖는 데이터를 저장한다. |
void | putAll(Map<? extends K, ? extends V m ) | 매개 변수로 넘어온 Map의 모든 데이터를 저장한다. |
V | get(Object key) | 매개 변수로 넘어온 키에 해당하는 값을 넘겨준다. |
V | remove(Object key) | 매개 변수로 넘어온 키에 해당하는 값을 넘겨주며, 해당 키와 값은 Map에서 삭제한다. |
Set | KeySet() | 키의 목록을 Set 타입으로 리턴한다. |
Collection | values() | 값의 목록을 Collection 타입으로 리턴한다. |
Set<Map.Entry<K,V>> | entrySet() | Map안에 Entry라는 타입의 Set을 리턴한다. |
int | size() | Map의 크기를 리턴한다. |
void | clear() | Map의 내용을 지운다. |
📖 대표 메소드 코드 예시
public class MapTest {
private static void makeMapData(Map<String, String> obj) {
for(int i = 0 ; i < 10; i += 1) {
obj.put("key"+i, String.valueOf(i*10));
}
}
private static void printLine() {
System.out.println("---------------------");
}
public static void main(String[] args) {
Map<String, String> testMap = new HashMap<>();
makeMapData(testMap);
// keySet 방법 1
for(String key : testMap.keySet()) {
System.out.println(key + " / " + testMap.get(key));
}
printLine();
// keySet 방법 2
Iterator<String> vIteratorK = testMap.keySet().iterator();
while(vIteratorK.hasNext()) {
String key = vIteratorK.next();
String value = testMap.get(key);
System.out.println(key + " / " + value);
}
printLine();
// entrySet 방법 1
Set<Map.Entry<String, String>> vEntrySet = testMap.entrySet();
for(Map.Entry<String, String> entry : vEntrySet) {
System.out.println(entry.getKey() + " / " + entry.getValue());
}
printLine();
// entrySet 방법 2
Iterator<Map.Entry<String, String>> vIterator = testMap.entrySet().iterator();
while(vIterator.hasNext()) {
Map.Entry<String, String> vSet = (Map.Entry<String, String>) vIterator.next();
String key = vSet.getKey();
String value = vSet.getValue();
System.out.println(key + " / " + value);
}
}
}
보편적으로 유명하고 많이 사용되는 클래스로는 HashMap
, TreeMap
, LinkedHashMap
, Hashtable
가 있다.
📖 HashMap과 Hashtable의 차이
Map
은 Collcetion view
를 사용하지만, Hashtable
은 Enumberation
객체를 통해서 데이터를 처리한다.Map
은 키, 값, 키-값 쌍으로 데이터를 순환하여 처리할 수 있지만,Hashtable
은 이 중에서 키-값 쌍으로 데이터를 순환하여 처리할 수 없다.Map은
Iterator를 처리하는 도중에 데이터를 삭제하는 안전한 방법을 제공하지만,
Hashtable`은 그러한 기능을 제공하지 않는다.기능 | HashMap | Hashtable |
---|---|---|
nullable | O | X |
Thread Safe | X | O |
❗Hashtable
을 제외한 Map
으로 끝나는 클래스들을 멀티 쓰레드에서 동시에 접근하여 처리할 필요가 있을 때는 아래와 같이 처리하여 사용하여야 한다.
Map<Key K, Value V> m = Collections.synchronizedMap(new HashMap<>());