Map이란?
"Map은 Key와 Value 한쌍으로 이루어진 자료형이다."
Map은 리스트나 배열처럼 순차적으로 해당 요소 값을 구하지 않고 Key를 통해 Value를 얻는다.
값(Value)은 중복될 수 있지만, Key는 고유한 값(Unique)을 가져야 한다.
Map은 저장 순서를 유지할 필요가 없고, Key를 통해 Value를 얻어내기 때문에 Key는 중복을 허용하지 않는다.
Map 사용법과 종류
Map에 키와 값 쌍을 저장합니다. 만약 이미 동일한 키가 있을 경우, 값을 덮어씁니다.
Map에서 키에 해당하는 값을 가져옵니다. 해당 키가 Map에 없을 경우 null을 반환합니다.
Map에서 키에 해당하는 값을 제거합니다. 해당 키가 없다면 아무런 작업도 수행하지 않습니다.
Map에 저장된 모든 키를 Set 형태로 반환하는 메서드입니다. 반환된 키 Set을 사용하여 모든 키를 반복 처리할 수 있습니다.
Map에 저장된 모든 값을 Collection 형태로 반환하는 메서드입니다. 반환된 값들의 컬렉션을 사용하여 모든 값을 반복 처리할 수 있습니다.
Map에 저장된 모든 키-값 쌍을 Set 형태로 반환하는 메서드입니다. 반환된 키-값 쌍 Set을 사용하여 모든 항목을 반복 처리할 수 있습니다.
Map에 특정 키가 있는지 확인하는 메서드입니다. 인수로 키 객체를 받아 해당하는 키가 있으면 true를 반환하고, 없으면 false를 반환합니다.
Map에 특정 값이 있는지 확인하는 메서드입니다. 인수로 값 객체를 받아 해당하는 값이 있으면 true를 반환하고, 없으면 false를 반환합니다.
// put(key, value) - 키와 값 쌍을 저장
linkedHashMap.put("apple", 3);
linkedHashMap.put("banana", 5);
linkedHashMap.put("orange", 2);
System.out.println("After put operations: " + linkedHashMap);
// get(key) - 키에 해당하는 값 가져오기
int appleCount = linkedHashMap.get("apple");
System.out.println("apple: " + appleCount);
// get(key) - 존재하지 않는 키의 경우 null 반환
Integer mangoCount = linkedHashMap.get("mango");
System.out.println("mango: " + mangoCount); // Should print null
// remove(key) - 키에 해당하는 값 제거
linkedHashMap.remove("banana");
System.out.println("After removing banana: " + linkedHashMap);
// keySet() - 모든 키를 Set 형태로 반환
Set<String> keys = linkedHashMap.keySet();
System.out.println("Keys: " + keys);
// values() - 모든 값을 Collection 형태로 반환
Collection<Integer> values = linkedHashMap.values();
System.out.println("Values: " + values);
// entrySet() - 모든 키-값 쌍을 Set 형태로 반환
Set<Map.Entry<String, Integer>> entries = linkedHashMap.entrySet();
System.out.println("Entries: " + entries);
// containsKey(key) - 특정 키가 있는지 확인
boolean hasApple = linkedHashMap.containsKey("apple");
System.out.println("Contains apple? " + hasApple);
// containsValue(value) - 특정 값이 있는지 확인
boolean hasValue2 = linkedHashMap.containsValue(2);
System.out.println("Contains value 2? " + hasValue2);
// 반복 처리 - keySet() 사용
System.out.println("Iterating using keySet:");
for (String key : keys) {
System.out.println(key + ": " + linkedHashMap.get(key));
}
HashMap은 가장 널리 사용되는 자바 Map 인터페이스의 구현체 중 하나입니다. HashMap의 주요 특징은 다음과 같습니다
HashMap<String, Integer> map = new HashMap<>();
TreeMap(트리맵)은 레드-블랙 트리 자료 구조를 기반으로 구현된 맵입니다. 이 데이터 구조는 키(key)에 대한 정렬을 보장하는 이진 검색 트리(binary search tree)의 확장으로 다음과 같은 특징을 가지고 있습니다.
TreeMap<String, Integer> treeMap = new TreeMap<>();
LinkedHashMap은 HashMap과 거의 유사한 성능을 제공하는 데이터 구조입니다. LinkedHashMap은 다음과 같은 특징이 있습니다.
LinkedHashMap은 키와 값 쌍을 저장한 순서대로 조회할 수 있습니다.
빠른 검색, 삽입, 삭제
LinkedHashMap은 키-값 쌍의 삽입, 삭제 및 조회에 있어서 빠른 성능을 제공합니다.
해시테이블(Hash table)과 Linked list로 구현
LinkedHashMap의 내부 구조는 해시테이블과 Linked list를 사용하여 구현되어 있습니다. Linked list를 통해 입력 순서를 유지하면서 동시에 해시 알고리즘을 사용해 복잡한 데이터 연산이 빠르게 이루어질 수 있게 합니다.
키와 값에 null 저장 가능
LinkedHashMap은 클라이언트에게 HashMap과 거의 동일한 인터페이스를 제공합니다. 따라서 여러 null 키-값 쌍을 저장할 수 있습니다.
LinkedHashMap<String, Integer> linkedHashMap = new LinkedHashMap<>();