Java

[JAVA] Map과 Set이란? 그리고 그 차이

고즈너키 2023. 5. 31. 11:50

Intro

안녕하세요! Plitche(플리체)입니다. :P
자바에서 Map과 Set은 컬렉션 프레임워크의 일부로, 데이터를 저장하고 관리하는 데 사용됩니다. 
서로 다른 데이터 구조를 제공하며, 각각의 고유한 특징과 사용 사례에 대해서 설명드리겠습니다.

Map

  • Map은 키-값 쌍으로 데이터를 저장하는 자료구조입니다.
  • 각각의 키는 유일해야 하며, 하나의 키에는 하나의 값만 매핑됩니다.
  • Map은 특정 키를 사용하여 값을 검색하거나, 키-값 쌍을 추가, 제거, 수정하는 데 사용됩니다.
  • 자바에서는 Map 인터페이스를 구현한 여러 클래스가 제공됩니다. 예를 들면 HashMap, TreeMap, LinkedHashMap 등이 있습니다.

  • Map 예시
Map<String, Integer> studentGrades = new HashMap<>();

// 키-값 쌍 추가
studentGrades.put("John", 85);
studentGrades.put("Emily", 92);
studentGrades.put("Mike", 78);

// 특정 키로 값을 검색
int johnGrade = studentGrades.get("John");

// 특정 키의 값 수정
studentGrades.put("John", 90);

// 키-값 쌍 제거
studentGrades.remove("Mike");

// 모든 키 순회
for (String key : studentGrades.keySet()) {
    int grade = studentGrades.get(key);
    System.out.println(key + ": " + grade);
}

 

  • Map의 주요 메서드
    • put(key, value): 특정 키와 값을 매핑하여 Map에 추가
    • get(key): 주어진 키에 해당하는 값을 반환
    • remove(key): 주어진 키에 해당하는 키-값 쌍을 제거
    • containsKey(key): 주어진 키가 Map에 있는지 여부를 확인
    • keySet(): 모든 키를 Set으로 반환
    • values(): 모든 값들을 Collection으로 반환
    • entrySet(): 모든 키-값 쌍을 Set으로 반환
Map<String, Integer> studentGrades = new HashMap<>();

studentGrades.put("John", 85);
studentGrades.put("Emily", 92);
studentGrades.put("Mike", 78);

System.out.println(studentGrades.get("John")); // 85

studentGrades.put("John", 90);

studentGrades.remove("Mike");

for (String key : studentGrades.keySet()) {
    int grade = studentGrades.get(key);
    System.out.println(key + ": " + grade);
}

Set

  • Set은 중복을 허용하지 않는 데이터 집합을 저장하는 자료구조입니다.
  • Set은 순서를 보장하지 않으며, 동일한 요소가 중복되지 않습니다.
  • Set은 주로 데이터 중복을 방지하거나, 집합 연산을 수행하기 위해 사용됩니다.
  • 자바에서는 Set 인터페이스를 구현한 여러 클래스가 제공됩니다. 예를 들면, HashSet, TreeSet, LinkedHashSet 등이 있습니다.

  • 예시
Set<String> fruits = new HashSet<>();

// 요소 추가
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
fruits.add("Apple"); // 중복된 요소는 추가되지 않음

// 요소 제거
fruits.remove("Banana");

// 요소 포함 여부 확인
boolean hasApple = fruits.contains("Apple");

// 모든 요소 순회
for (String fruit : fruits) {
    System.out.println(fruit);
}

 

  • Set 주요 메서드
    • add(element): 주어진 요소를 Set에 추가
    • remove(element): 주어진 요소를 Set에서 제거
    • contains(element): 주어진 요소가 Set에 있는지 여부를 확인
    • size(): Set에 저장된 요소의 개수를 반환
    • iterator(): Set의 모든 요소를 순회하는 Iterator를 반환
Set<String> fruits = new HashSet<>();

fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
fruits.add("Apple"); // 중복된 요소는 추가되지 않음

fruits.remove("Banana");

System.out.println(fruits.contains("Apple")); // true

for (String fruit : fruits) {
    System.out.println(fruit);
}

 

Map과 Set의 주요 차이점

  • Map은 키-값 쌍으로 데이터를 저장하고, 특정 키를 사용하여 값을 검색하거나 수정합니다. Set은 중복을 허용하지 않는 단순한 데이터 집합을 저장합니다.

  • Map은 저장된 데이터를 키를 기반으로 검색하고 수정할 수 있으므로, 많은 키-값 쌍을 포함하는 데이터 구조로 사용됩니다. Set은 주로 데이터 중복을 방지하거나 집합 연산을 수행하기 위해 사용됩니다.

  • 또한, Map은 내부적으로 해시 함수를 사용하여 키-값 쌍을 저장하므로, 데이터에 대한 빠른 검색이 가능합니다. 반면 Set은 요소를 저장할 때 동일한 해시 함수를 사용하여 중복을 제거합니다.

  • 마지막으로, Map은 키-값 쌍이라는 두 가지 데이터를 관리하므로 키와 값 간의 매핑 관계를 유지해야 합니다. Set은 각 요소가 독립적으로 관리되며, 순서가 보장되지 않습니다.

    이러한 차이점을 고려하여 데이터를 저장하고 검색할 때 적합한 자료구조를 선택할 수 있습니다.