Java

[Java] 자료형 (Map, Set)

이덩우 2023. 5. 24. 10:53

- Map (맵)

  • key에 대응되는 value를 가진 관계를 자료형
key value
name 홍길동
나이 26
  • key를 통해 value를 얻는다 --> 하나 하나 모든 것을 확인하지 않고, key값을 통해 바로 value를 얻어낼 수 있다.
  • HashMap이 가장 대표적이다.
  • HashMap의 메소드
    1. put() : key와 value값을 넣는다.
import java.util.HashMap;

public class Sample {
    public static void main(String[] args) {
        HashMap<String, String> map = new HashMap<>();
        map.put("people", "사람");
        map.put("baseball", "야구");
    }
}

HashMap도 마찬가지로 제네릭스를 이용한다.

 

2. get() : key에 해당하는 value를 얻는다.

System.out.println(map.get("people"));  // "사람" 출력
사람

key에 해당하는 value가 없으면, get() 메소드의 결과로 null이 출력된다. 

해당 경우에 디폴트 값을 원한다면 getOrDefault() 메소드를 사용한다.

 

3. containsKey() : 맵에 키가 있는지 확인해 true or false로 반환한다.

 

4. remove() : key를 매개체로, key와 연결된 value를 모두 삭제하고 value값을 반환한다.

 

5. size() : 맵의 크기를 반환한다.

 

6. keySet() : 맵의 모든 key를 모아서 Set자료형으로 반환한다.

import java.util.HashMap;

public class Sample {
    public static void main(String[] args) {
        HashMap<String, String> map = new HashMap<>();
        map.put("people", "사람");
        map.put("baseball", "야구");
        System.out.println(map.keySet());  // [baseball, people] 출력
    }
}

아래와 같이 List형으로 변환해 사용할 수 있다.

List<String> keyList = new ArrayList<>(map.keySet());

 

  • LinkedHashMap은 입력된 순서대로 데이터를 저장하는 특징을 가지고 있다.
  • TreeMap은 입력된 key의 오름차순 순서로 데이터를 저장하는 특징을 가지고 있다.

 

- Set (집합)

  • set은 집합이므로, 원소의 중복을 허용하지 않고 순서가 없다.
import java.util.Arrays;
import java.util.HashSet;

public class Sample {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>(Arrays.asList("H", "e", "l", "l", "o"));
        System.out.println(set);  //  [e, H, l, o] 출력
    }
}
[e, H, l, o] 

위처럼 h,e,l,l,o를 원소로 넣어 집합을 만들었지만, 결과는 순서가 보장되지 않고 중복값이 사라진 것을 볼 수 있다.

--> 자료형의 중복을 제거하기 위한 필터로 Set을 사용할 수 있다.

 

  • set의 메소드
    1. 교집합 : retainAll()
    2. 합집합 : addAll()
    3. 차집합 : removeAll()
    위 메소드들은 사용법이 동일하다. 교집합을 예시로 알아보자
import java.util.Arrays;
import java.util.HashSet;

public class Sample {
    public static void main(String[] args) {
        HashSet<Integer> s1 = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5, 6));
        HashSet<Integer> s2 = new HashSet<>(Arrays.asList(4, 5, 6, 7, 8, 9));

        HashSet<Integer> intersection = new HashSet<>(s1);  // s1으로 intersection 생성
        intersection.retainAll(s2);  // 교집합 수행
        System.out.println(intersection);  // [4, 5, 6] 출력
    }
}
[4, 5, 6]

특정 원소만 추가, 제거 하고싶다면 All을 빼면된다.

 

  • TreeSet - 오름차순으로 값을 정렬하여 저장하는 특징이 있다.
  • LinkedHashSet - 입력한 순서대로 값을 정렬하여 저장하는 특징이 있다.

 

 

출처 : https://wikidocs.net/208