-
1. Map과 Set
-
2. Map 이란?
-
3. HashMap 의 작동 원리
-
4. HashMap 주요 메서드
-
4-1. put
-
4-2. get
-
4-3. getOrDefault
-
4-4. containsKey
-
4-5. remove
-
4-6. size
-
4-7. keySet
-
5. Set 이란?
-
6. Map과 Set 비교
-
7. Set으로 교집합, 차집합, 합집합 구하기
-
7-1. 교집합 (retainAll 메서드)
-
7-2. 합집합 (addAll 메서드)
-
7-3. 차집합 (removeAll 메서드)
-
8. TreeSet과 LinkedHashSet
-
포스팅에 참조한 자료
전부터 포스팅 해야 겠다고 생각했는데 미루다가 하는 포스팅
자료조사 하려면 너무 오래걸려서 다음에 하려다가
지금 짬내서 후딱 해 버리자
1. Map과 Set
Map과 Set은 자바에서 컬렉션 프레임워크(Collection Framework)에 속하는 자료구조이다. 둘 다 java.util패키지에 포함되어 있다. 기본 자료형은 아니고 객체로 다루어지는 자료구조인데, Map은 key-value 형태로 빠른 검색이 필요한 대량의 데이터를 다룰 때 유용하고, Set은 중복 없는 데이터 집합이 필요할 때 사용된다.
2. Map 이란?
사람을 ‘이름 = 최다인’, '키 = 165' 등으로 구분할 수 있듯이 맵(Map) 은 대응 관계를 쉽게 표현할 수 있게 해주는 자료형이다. 맵의 구현체 중에 가장 유명한 건 해시맵이라 Map을 그냥 Hash라고 부르는 사람도 있다.
Python(파이썬)에도 Dictionary라는 자료구조가 있듯이, 맵도 사전(dictionary)과 비슷하다. 예를 들어 people이란 단어에는 사람, baseball이라는 단어에는 야구라는 뜻이 부합되듯이 맵은 키(key)와 값(value)을 한 쌍으로 갖는 자료형이기 때문이다.

그럼 Map은 어디에 쓰이며, Map이 가진 장점이 뭘까?
맵은 리스트나 배열처럼 순차적으로(sequential) 한 칸씩 순회하면서 값을 구하지 않는다. 그 대신 키(key)를 이용해 값(value)을 얻는다. 우리가 pizza 이란 단어의 뜻을 찾을 때 사전의 1쪽부터 모두 읽지 않고 pizza이라는 단어가 있는 곳을 찾아 바로 확인하는 것과 같다.
3. HashMap 의 작동 원리
맵의 자료형(보통 구현체 라고 함)에는 HashMap, LinkedHashMap, TreeMap 등이 있으나, 일반적으로 가장 많이 쓰이는 HashMap (해시맵)만 간단히 살펴 보자.

구글에 떠도는 hashmap 그림 중에 가장 자주 보이는 것을 가져왔다. Map을 구현한 클래스들이 내부적으로 데이터를 어떻게 저장하고 관리하는지 이해하려면, 키(key), 버킷(bucket), 그리고 엔트리(entry) 개념을 알아야 한다.
키(key)
Key는 Map에서 데이터를 찾을 때 사용하는 고유한 식별자이다, 따라서 key는 중복될 수 없으며, 각 키는 하나의 value와 연결된다. 그래서 key는 데이터 조회, 추가, 삭제의 기준이 되며, Map에서 특정 값을 가져오려면 key를 사용한다.
버킷(Bucket)
HashMap은 해시 테이블을 사용하여 데이터를 저장하는데, key는 해시 함수에 의해 특정 버킷 번호로 매핑된다. 즉, 내부적으로 Map은key를 해시 값으로 변환한 후, 이를 여러 개의 "버킷(Bucket)"으로 나누어 저장한다. 버킷은 Map이 데이터를 효율적으로 검색하고 관리할 수 있도록 도와주는 배열 또는 리스트 형태의 공간쯤이라고 알고 있으면 된다.
엔트리(Entry)
Entry는 key와 value를 하나의 엔트리로 묶은 것이다. Map.Entry는 자바에서 Map 인터페이스 내부에 정의된 인터페이스로, 이 객체는 key와 value를 각각 getKey()와 getValue() 메서드로 반환해 준다. 한 마디로 엔트리는 HashMap 안에 있는 값들을 조회해서 가지고 오는 역할을 한다. 예를 들어, entrySet() 메서드를 사용하면 Set<Map.Entry<K, V>> 형태로 가져온다.
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
4. HashMap 주요 메서드
4-1. put
Map에 key와 value를 추가하는 메서드
map.put("key", "value");
map.put("people", "사람");
import java.util.HashMap;
public class Sample {
public static void main(String[] args) {
// 1. HashMap은 ArrayList처럼 제네릭스<>를 이용해 선언한다
HashMap<String, String> map = new HashMap<>();
map.put("people", "사람");
map.put("pizza", "피자");
}
}
4-2. get
get 메서드는 key에 해당하는 value를 얻을 때 사용한다.
map.get("Key")
map.get("people")
import java.util.HashMap;
public class Sample {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<>();
map.put("people", "사람");
map.put("piza", "피자");
System.out.println(map.get("people"));
// key인 people에 대응하는 value인 "사람" 출력
}
}
4-3. getOrDefault
map.getOrDefault("key", "기본값")
맵의 key에 해당하는 value가 없을 때 get 메서드를 사용하면 null값이 리턴된다. 이를 방지하고자 할 때 기본값을 설정해주는 용도로 사용하는 메서드가 getOrDefault이다. map에 성별값을 매핑해 주지 않은 경우, 성별을 조회하면 null값이 리턴된다.
System.out.println(map.get("gender")); // null 출력
null 대신 기본값(default)을 얻고 싶다면 getOrDefault 메서드를 사용해 주면 된다. 성별을 지정하지 않은 경우 기본적으로 남성으로 출력 해 주고 싶다면 아래와 같이 입력해 주면 된다.
System.out.println(map.getOrDefault("gender", "남성")); // "남성" 출력
4-4. containsKey
containsKey 메서드는 맵에 해당 key가 있는지 여부를 boolean : 참(true) 또는 거짓(false)으로 리턴한다.
import java.util.HashMap;
public class Sample {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<>();
map.put("people", "사람");
map.put("piza", "피자");
System.out.println(map.containsKey("people"));
// people 이라는 key가 존재하므로 true 출력
}
}
4-5. remove
remove 메서드는 맵의 항목을 삭제하는 메서드로, 해당 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("piza", "피자");
System.out.println(map.remove("people"));
// people에 해당되는 key와 value가 모두 삭제된 후 "사람" 출력
}
}
4-6. size
size 메서드는 맵 요소의 개수를 리턴한다. (ArrayList 사이즈 리턴하는 것과 비슷)
import java.util.HashMap;
public class Sample {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<>();
map.put("people", "사람");
map.put("piza", "피자");
System.out .println(map.remove(“people”)); // 사람 출력 후 해당 키값 삭제
System.out.println(map.size()); // 1 출력
}
}
people, pizza 두 개를 가지고 있다가 people이 삭제되어 1을 출력한다.
4-7. keySet
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("pizza", "피자");
System.out.println(map.keySet()); // [people, pizza] 출력
}
}
HashMap은 데이터를 정렬하지 않는 자료구조이다. HashMap에 저장된 key-value 쌍들은 입력 순서대로 반환되지 않으며, keySet() 메서드를 호출할 때도 특정 순서가 보장되지는 않는다.
그래서 System.out.println(map.keySet());이 출력할 값은 ["people", "pizza"]와 같은 집합이기는 하지만, people과 pizza 중에서 어느 것이 먼저 출력될지는 예측할 수 없다. 그 이유는 HashMap 내부에서 key들이 어떻게 해시 테이블에 저장되었는지에 따라 달라지기 때문이다.
keySet()으로 얻은 결과값은 ArrayList로 변환해서 사용할 수 있다.
ArrayList<String> keyList = new ArrayList<>(map.keySet());
5. Set 이란?
- Map: 키와 값이 연관되어 저장되며, 특정 키를 통해 값을 빠르게 조회할 수 있는 자료구조
- Set: 중복을 허용하지 않는 데이터 집합을 관리하는 데 사용되며, 중복 제거를 위한 필터 역할을 하거나 값의 존재 여부를 확인할 때 유용하다.
자바에서 set을 다른 말로 집합이라고 한다. 위에서 본 map과 반대로 set에는 두 가지 특징이 있는데,
- 중복을 허용하지 않는다.
- 순서가 없다(unordered).
6. Map과 Set 비교

그렇다면 set 자료형 중 가장 많이 사용하는 HashSet에 대해 간단히 알아보자.
7. Set으로 교집합, 차집합, 합집합 구하기
아래 내용은 점프 투 자바에서 그대로 발췌한 코드와 예제입니다.
03-09 집합
집합(Set) 자료형은 집합과 관련된 것을 쉽게 처리하기 위해 만든 것으로 HashSet, TreeSet, LinkedHashSet 등이 있다. 이 중에서 가장 많이 사용하는 H…
wikidocs.net
먼저 아래처럼 s1, s2 라는 집합 자료형을 두 개 선언 해 주었다
s1의 범위는 부터 6까지, s2는 4부터 9까지이다.
set이 가진 메서드를 통해 두 집합의 교집합, 차집합, 합집합을 구해보자.
import java.util.Arrays;
import java.util.HashSet;
public class Sample {
public static void main(String[] args) {
// 먼저 set 자료형 두 개를 선언해주자
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));
}
}
7-1. 교집합 (retainAll 메서드)

retainAll 메서드로 교집합을 수행
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] 출력
}
}
retainAll 메서드를 이용하면 교집합을 쉽게 구할 수 있다.
하지만
retainAll 메서드는 호출한 컬렉션에서 주어진 컬렉션의 교집합에 해당하는 요소들만 남기고 나머지는 모두 삭제하는 메서드이다. s1에 직접 retainAll(s2)를 호출하면 s1의 내용이 교집합에 해당하는 값들만 남는다. 즉 retainAll은 원본 컬렉션인 s1를 수정하기 때문에, s1을 그대로 유지하기 우해 intersection이라는 해시셋을 별도로 선언해서 교집합을 수행해 주었다.
7-2. 합집합 (addAll 메서드)

합집합은 addAll 메서드를 사용한다.
위 그림에서 4, 5, 6처럼 중복해서 포함된 값은 한 개씩만 표현된다.
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> union = new HashSet<>(s1); // s1으로 union 생성
union.addAll(s2); // 합집합 수행
System.out.println(union); // [1, 2, 3, 4, 5, 6, 7, 8, 9] 출력
}
}
여기서 addAll 메서드의 또 다른 쓰임 **
값을 한꺼번에 여러 개 추가할 때도 addAll 메서드를 사용한다.
값을 삭제할 때는 set.remove 메서드를 써 준다.
import java.util.Arrays;
import java.util.HashSet;
public class Sample {
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
set.add("Hello");
set.addAll(Arrays.asList("World", "!"));
System.out.println(set); // [Hello, World, !] 출력
set.remove("!");
System.out.println(set); // [Hello, World] 출력
}
}
7-3. 차집합 (removeAll 메서드)

차집합은 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> substract = new HashSet<>(s1); // s1으로 substract 생성
substract.removeAll(s2); // 차집합 수행
System.out.println(substract); // [1, 2, 3] 출력
}
}
8. TreeSet과 LinkedHashSet
집합 자료형의 특징은 순서가 없다는 것이다. 그런데 집합에 입력한 순서대로 데이터를 가져오거나 오름차순으로 정렬된 데이터를 가져오고 싶을 수 있다. 이럴 때 사용하는 것이 TreeSet과 LinkedHashSet이다.
- TreeSet : 값을 오름차순으로 정렬해 저장한다.
- LinkedHashSet : 값을 입력한 순서대로 정렬한다.
포스팅에 참조한 자료
- chatGPT와 구글 검색 (이미지나 코드 출처 각각 표기하였음)
- 박응용 JUMP TO JAVA
- 내 머릿속 ㅎㅎㅎ
불펌금지 포스팅 하는데 2시간 걸림
'Java' 카테고리의 다른 글
[이클립스] Eclipse 깃허브 커밋 푸쉬 로그인 안됨 해결법 (can't connect to any~) (65) | 2024.12.14 |
---|---|
[Java] 배열 사용자정의 정렬하는 법(내림차순, 람다식) (4) | 2024.11.12 |
[Java] JDBC 오라클이랑 자바 연동 (31) | 2024.11.04 |
[Java] ArrayList, 제네릭스(Generics), 정렬, Join, String.join 정리 (8) | 2024.11.03 |
StringBuffer 사용법, 예시, String 과 차이, StringBuilder (5) | 2024.11.03 |
전부터 포스팅 해야 겠다고 생각했는데 미루다가 하는 포스팅
자료조사 하려면 너무 오래걸려서 다음에 하려다가
지금 짬내서 후딱 해 버리자
1. Map과 Set
Map과 Set은 자바에서 컬렉션 프레임워크(Collection Framework)에 속하는 자료구조이다. 둘 다 java.util패키지에 포함되어 있다. 기본 자료형은 아니고 객체로 다루어지는 자료구조인데, Map은 key-value 형태로 빠른 검색이 필요한 대량의 데이터를 다룰 때 유용하고, Set은 중복 없는 데이터 집합이 필요할 때 사용된다.
2. Map 이란?
사람을 ‘이름 = 최다인’, '키 = 165' 등으로 구분할 수 있듯이 맵(Map) 은 대응 관계를 쉽게 표현할 수 있게 해주는 자료형이다. 맵의 구현체 중에 가장 유명한 건 해시맵이라 Map을 그냥 Hash라고 부르는 사람도 있다.
Python(파이썬)에도 Dictionary라는 자료구조가 있듯이, 맵도 사전(dictionary)과 비슷하다. 예를 들어 people이란 단어에는 사람, baseball이라는 단어에는 야구라는 뜻이 부합되듯이 맵은 키(key)와 값(value)을 한 쌍으로 갖는 자료형이기 때문이다.

그럼 Map은 어디에 쓰이며, Map이 가진 장점이 뭘까?
맵은 리스트나 배열처럼 순차적으로(sequential) 한 칸씩 순회하면서 값을 구하지 않는다. 그 대신 키(key)를 이용해 값(value)을 얻는다. 우리가 pizza 이란 단어의 뜻을 찾을 때 사전의 1쪽부터 모두 읽지 않고 pizza이라는 단어가 있는 곳을 찾아 바로 확인하는 것과 같다.
3. HashMap 의 작동 원리
맵의 자료형(보통 구현체 라고 함)에는 HashMap, LinkedHashMap, TreeMap 등이 있으나, 일반적으로 가장 많이 쓰이는 HashMap (해시맵)만 간단히 살펴 보자.

구글에 떠도는 hashmap 그림 중에 가장 자주 보이는 것을 가져왔다. Map을 구현한 클래스들이 내부적으로 데이터를 어떻게 저장하고 관리하는지 이해하려면, 키(key), 버킷(bucket), 그리고 엔트리(entry) 개념을 알아야 한다.
키(key)
Key는 Map에서 데이터를 찾을 때 사용하는 고유한 식별자이다, 따라서 key는 중복될 수 없으며, 각 키는 하나의 value와 연결된다. 그래서 key는 데이터 조회, 추가, 삭제의 기준이 되며, Map에서 특정 값을 가져오려면 key를 사용한다.
버킷(Bucket)
HashMap은 해시 테이블을 사용하여 데이터를 저장하는데, key는 해시 함수에 의해 특정 버킷 번호로 매핑된다. 즉, 내부적으로 Map은key를 해시 값으로 변환한 후, 이를 여러 개의 "버킷(Bucket)"으로 나누어 저장한다. 버킷은 Map이 데이터를 효율적으로 검색하고 관리할 수 있도록 도와주는 배열 또는 리스트 형태의 공간쯤이라고 알고 있으면 된다.
엔트리(Entry)
Entry는 key와 value를 하나의 엔트리로 묶은 것이다. Map.Entry는 자바에서 Map 인터페이스 내부에 정의된 인터페이스로, 이 객체는 key와 value를 각각 getKey()와 getValue() 메서드로 반환해 준다. 한 마디로 엔트리는 HashMap 안에 있는 값들을 조회해서 가지고 오는 역할을 한다. 예를 들어, entrySet() 메서드를 사용하면 Set<Map.Entry<K, V>> 형태로 가져온다.
for (Map.Entry<String, Integer> entry : map.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); }
4. HashMap 주요 메서드
4-1. put
Map에 key와 value를 추가하는 메서드
map.put("key", "value"); map.put("people", "사람");
import java.util.HashMap; public class Sample { public static void main(String[] args) { // 1. HashMap은 ArrayList처럼 제네릭스<>를 이용해 선언한다 HashMap<String, String> map = new HashMap<>(); map.put("people", "사람"); map.put("pizza", "피자"); } }
4-2. get
get 메서드는 key에 해당하는 value를 얻을 때 사용한다.
map.get("Key") map.get("people")
import java.util.HashMap; public class Sample { public static void main(String[] args) { HashMap<String, String> map = new HashMap<>(); map.put("people", "사람"); map.put("piza", "피자"); System.out.println(map.get("people")); // key인 people에 대응하는 value인 "사람" 출력 } }
4-3. getOrDefault
map.getOrDefault("key", "기본값")
맵의 key에 해당하는 value가 없을 때 get 메서드를 사용하면 null값이 리턴된다. 이를 방지하고자 할 때 기본값을 설정해주는 용도로 사용하는 메서드가 getOrDefault이다. map에 성별값을 매핑해 주지 않은 경우, 성별을 조회하면 null값이 리턴된다.
System.out.println(map.get("gender")); // null 출력
null 대신 기본값(default)을 얻고 싶다면 getOrDefault 메서드를 사용해 주면 된다. 성별을 지정하지 않은 경우 기본적으로 남성으로 출력 해 주고 싶다면 아래와 같이 입력해 주면 된다.
System.out.println(map.getOrDefault("gender", "남성")); // "남성" 출력
4-4. containsKey
containsKey 메서드는 맵에 해당 key가 있는지 여부를 boolean : 참(true) 또는 거짓(false)으로 리턴한다.
import java.util.HashMap; public class Sample { public static void main(String[] args) { HashMap<String, String> map = new HashMap<>(); map.put("people", "사람"); map.put("piza", "피자"); System.out.println(map.containsKey("people")); // people 이라는 key가 존재하므로 true 출력 } }
4-5. remove
remove 메서드는 맵의 항목을 삭제하는 메서드로, 해당 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("piza", "피자"); System.out.println(map.remove("people")); // people에 해당되는 key와 value가 모두 삭제된 후 "사람" 출력 } }
4-6. size
size 메서드는 맵 요소의 개수를 리턴한다. (ArrayList 사이즈 리턴하는 것과 비슷)
import java.util.HashMap; public class Sample { public static void main(String[] args) { HashMap<String, String> map = new HashMap<>(); map.put("people", "사람"); map.put("piza", "피자"); System.out .println(map.remove(“people”)); // 사람 출력 후 해당 키값 삭제 System.out.println(map.size()); // 1 출력 } }
people, pizza 두 개를 가지고 있다가 people이 삭제되어 1을 출력한다.
4-7. keySet
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("pizza", "피자"); System.out.println(map.keySet()); // [people, pizza] 출력 } }
HashMap은 데이터를 정렬하지 않는 자료구조이다. HashMap에 저장된 key-value 쌍들은 입력 순서대로 반환되지 않으며, keySet() 메서드를 호출할 때도 특정 순서가 보장되지는 않는다.
그래서 System.out.println(map.keySet());이 출력할 값은 ["people", "pizza"]와 같은 집합이기는 하지만, people과 pizza 중에서 어느 것이 먼저 출력될지는 예측할 수 없다. 그 이유는 HashMap 내부에서 key들이 어떻게 해시 테이블에 저장되었는지에 따라 달라지기 때문이다.
keySet()으로 얻은 결과값은 ArrayList로 변환해서 사용할 수 있다.
ArrayList<String> keyList = new ArrayList<>(map.keySet());
5. Set 이란?
- Map: 키와 값이 연관되어 저장되며, 특정 키를 통해 값을 빠르게 조회할 수 있는 자료구조
- Set: 중복을 허용하지 않는 데이터 집합을 관리하는 데 사용되며, 중복 제거를 위한 필터 역할을 하거나 값의 존재 여부를 확인할 때 유용하다.
자바에서 set을 다른 말로 집합이라고 한다. 위에서 본 map과 반대로 set에는 두 가지 특징이 있는데,
- 중복을 허용하지 않는다.
- 순서가 없다(unordered).
6. Map과 Set 비교

그렇다면 set 자료형 중 가장 많이 사용하는 HashSet에 대해 간단히 알아보자.
7. Set으로 교집합, 차집합, 합집합 구하기
아래 내용은 점프 투 자바에서 그대로 발췌한 코드와 예제입니다.
03-09 집합
집합(Set) 자료형은 집합과 관련된 것을 쉽게 처리하기 위해 만든 것으로 HashSet, TreeSet, LinkedHashSet 등이 있다. 이 중에서 가장 많이 사용하는 H…
wikidocs.net
먼저 아래처럼 s1, s2 라는 집합 자료형을 두 개 선언 해 주었다
s1의 범위는 부터 6까지, s2는 4부터 9까지이다.
set이 가진 메서드를 통해 두 집합의 교집합, 차집합, 합집합을 구해보자.
import java.util.Arrays; import java.util.HashSet; public class Sample { public static void main(String[] args) { // 먼저 set 자료형 두 개를 선언해주자 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)); } }
7-1. 교집합 (retainAll 메서드)

retainAll 메서드로 교집합을 수행
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] 출력 } }
retainAll 메서드를 이용하면 교집합을 쉽게 구할 수 있다.
하지만
retainAll 메서드는 호출한 컬렉션에서 주어진 컬렉션의 교집합에 해당하는 요소들만 남기고 나머지는 모두 삭제하는 메서드이다. s1에 직접 retainAll(s2)를 호출하면 s1의 내용이 교집합에 해당하는 값들만 남는다. 즉 retainAll은 원본 컬렉션인 s1를 수정하기 때문에, s1을 그대로 유지하기 우해 intersection이라는 해시셋을 별도로 선언해서 교집합을 수행해 주었다.
7-2. 합집합 (addAll 메서드)

합집합은 addAll 메서드를 사용한다.
위 그림에서 4, 5, 6처럼 중복해서 포함된 값은 한 개씩만 표현된다.
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> union = new HashSet<>(s1); // s1으로 union 생성 union.addAll(s2); // 합집합 수행 System.out.println(union); // [1, 2, 3, 4, 5, 6, 7, 8, 9] 출력 } }
여기서 addAll 메서드의 또 다른 쓰임 **
값을 한꺼번에 여러 개 추가할 때도 addAll 메서드를 사용한다.
값을 삭제할 때는 set.remove 메서드를 써 준다.
import java.util.Arrays; import java.util.HashSet; public class Sample { public static void main(String[] args) { HashSet<String> set = new HashSet<>(); set.add("Hello"); set.addAll(Arrays.asList("World", "!")); System.out.println(set); // [Hello, World, !] 출력 set.remove("!"); System.out.println(set); // [Hello, World] 출력 } }
7-3. 차집합 (removeAll 메서드)

차집합은 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> substract = new HashSet<>(s1); // s1으로 substract 생성 substract.removeAll(s2); // 차집합 수행 System.out.println(substract); // [1, 2, 3] 출력 } }
8. TreeSet과 LinkedHashSet
집합 자료형의 특징은 순서가 없다는 것이다. 그런데 집합에 입력한 순서대로 데이터를 가져오거나 오름차순으로 정렬된 데이터를 가져오고 싶을 수 있다. 이럴 때 사용하는 것이 TreeSet과 LinkedHashSet이다.
- TreeSet : 값을 오름차순으로 정렬해 저장한다.
- LinkedHashSet : 값을 입력한 순서대로 정렬한다.
포스팅에 참조한 자료
- chatGPT와 구글 검색 (이미지나 코드 출처 각각 표기하였음)
- 박응용 JUMP TO JAVA
- 내 머릿속 ㅎㅎㅎ
불펌금지 포스팅 하는데 2시간 걸림
'Java' 카테고리의 다른 글
[이클립스] Eclipse 깃허브 커밋 푸쉬 로그인 안됨 해결법 (can't connect to any~) (65) | 2024.12.14 |
---|---|
[Java] 배열 사용자정의 정렬하는 법(내림차순, 람다식) (4) | 2024.11.12 |
[Java] JDBC 오라클이랑 자바 연동 (31) | 2024.11.04 |
[Java] ArrayList, 제네릭스(Generics), 정렬, Join, String.join 정리 (8) | 2024.11.03 |
StringBuffer 사용법, 예시, String 과 차이, StringBuilder (5) | 2024.11.03 |