Post

Map

Map이란?

Java의 Map은 키(Key)와 값(Value)의 쌍으로 데이터를 저장하는 자료구조이다. 키 값은 유일해야하며, 하나의 키에 하나의 값만 대응될 수 있다. Map 인터페이스를 사용하면 중복되지 않는 키로 데이터를 효율적으로 관리하고 검색할 수 있다.

Map 종류

HashMap

  • 가장 많이 사용되는 Map 구현체로 해시 테이블을 사용해 데이터를 저장하므로서 검색과 삽입 속도가 빠르다.
  • 입력 순서를 보장하지 않는다.

LinkedHashMap

  • HashMap과 동일하지만, 삽입된 순서를 유지한다.
  • 데이터를 순차적으로 접근해야 할 때 유용하다.

TreeMap

  • 키의 자연 순서 또는 제공된 Comparator에 따라 정렬된 순서를 유지한다.
  • 내부적으로 이진 검색 트리(Red-Black Tree)를 사용하므로 삽입, 삭제, 검색의 시간복잡도는 O(logN)이다.
1
2
3
4
5
6
7
8
// Comparator 적용 방법
TreeMap<Integer, String> treeMap = new TreeMap<>(new Comparator<Integer>() {
    @Override
    public int compare(Integer a, Integer b) {
        // 내림차순 정렬
        return Integer.compare(b, a);
    }
});

Map 주요 메서드

put(K key, V value)

키와 값을 Map에 삽입한다.

1
map.put("Apple", 3);

get(Object key)

주어진 키에 대응하는 값을 반환한다.

1
System.out.println("Apple의 값: " + map.get("Apple")); // 출력: Apple의 값: 3

대응하는 키가 없으면 null을 반환한다.

remove(Object key)

키-값 쌍을 삭제한다.

1
map.remove("Banana");

만약 키 값이 존재하지 않는다면 null을 반환한다.

containsKey(Object key)

주어진 키가 Map에 존재하는지 확인한다.

1
System.out.println("Apple 키가 존재하는가? " + map.containsKey("Apple")); // 출력: Apple 키가 존재하는가? true

containsValue(Object value)

주어진 값이 Map에 존재하는지 확인합니다.

1
System.out.println("값 7이 존재하는가? " + map.containsValue(7)); // 출력: 값 7이 존재하는가? false

값이 여러 개 존재할 경우에는 첫 번째로 일치하는 값만을 확인하고, 그 값을 가진 키를 반환하지 않는다.

size()

Map에 저장된 키-값 쌍의 개수를 반환한다.

1
System.out.println("Map의 크기: " + map.size()); // 출력: Map의 크기: 1

keySet()

Map의 모든 키를 Set으로 반환하여 출력한다.

1
System.out.println("키 목록: " + keys); // 출력: 키 목록: [Apple]

values()

Map의 모든 값을 Collection으로 반환하여 출력한다.

1
2
Collection<Integer> values = map.values();
System.out.println("값 목록: " + values); // 출력: 값 목록: [3]

Collection으로 받은 값들은 다른 자료 구조로 변환하여 상황에 맞게 사용할 수 있다.

1
2
3
Collection<Integer> values = map.values();
ArrayList<Integer> arrayList = new ArrayList<>(values);
Queue<Integer> queue = new LinkedList<>(values);

entrySet()

Map의 키-값 쌍을 Set으로 반환하여 각각의 항목을 출력한다. Map을 순회할 때 많이 사용한다.

1
2
3
for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println("키: " + entry.getKey() + ", 값: " + entry.getValue());
}

getOrDefault(Object key, V defaultValue)

Map에 주어진 key가 존재하면 그 값을 반환하고, 존재하지 않으면 defaultValue를 반환한다. 이를 사용하면 containsKey 조건문을 사용하지 않고 코드를 축약해서 표현 할 수 있다.

1
2
3
4
int value;
if(!map.containsKey("Banana")) value = 0;
// getOrDefault 사용
int value = map.getOrDefault("Banana",0);
1
2
3
4
5
// map을 사용하여 바나나의 개수를 저장하는 경우
if(!map.containsKey("Banana")) map.put("Banana",1);
else map.put(map.get("Banana") + 1);
// getOrDefault 사용
map.put("Banana", map.getOrDefault("Banana", 0) + 1);
This post is licensed under CC BY 4.0 by the author.