[Lecture Note] 객체지향 프로그래밍 - 자료형 set
원문 링크이며 해당 글을 참고한 정리한 글입니다.
Set
주어진 데이터를 중복을 허용하지 않고, 순서가 없이 정리하는 방식이 Set의 특징입니다.
순서가 없기 때문에 Map과 마찬가지로 indexing을 지원하지 않습니다.
집합이기 때문에 주로 교집합, 차집합 등 필터링을 할 때 주로 사용된다고 합니다.
List와 마찬가지로 Set 인터페이스를 구현한 자료형 중에서 HashMap, TreeSet 등등 여러가지가 있다고 하며 지금은 HashSet을 다루기로 합니다.
참고로 LinkedHashSet은 입력순서로 저장하는 Set이며과 TreeSet의 경우 오름차순으로 데이터를 저장합니다.
Declaration
Generics로 int를 사용할 때엔 Integer라는 Wrapper class를 사용해야 한다고 합니다.
import java.util.Arrays;
import java.util.HashSet;
...
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));
Method
- retainAll: 다른 HashSet(input)과 교집합을 기존의 HashSet으로 사용
retainAll을 사용할 경우 해당 변수가 바뀌게 되니 다른 변수에 저장해놓고 사용하기도 합니다.
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);
intersection.retainAll(s2);
- addAll : 합집합으로 값을 치환합니다.
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);
- removeAll : 차집합으로 값을 치환합니다.
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);
- add / remove : 값을 하나씩 처리하게 됩니다.
댓글남기기