set
set
자바에서 Set은 컬렉션 프레임워크(Collection Framework)의 인터페이스 중 하나로, 중복을 허용하지 않고 순서가 없는 집합이라는 개념을 구현한 자료구조를 나타냅니다. 이는 수학적인 집합 이론에서의 개념과 유사하며, 각 요소는 한 번만 포함될 수 있습니다. Java의 Set 인터페이스는 다양한 구현체를 제공하며, 주로 HashSet, LinkedHashSet, TreeSet 등이 사용됩니다.
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] 출력
// 순서x 중복x
}
유일한 요소: Set은 중복된 요소를 허용하지 않습니다. 각 요소는 최대 한 번만 저장될 수 있습니다
순서 없음: Set은 요소들의 순서를 보장하지 않습니다. 즉, 요소들이 저장된 순서와 반복(iteration)하는 순서는 일치하지 않을 수 있습니다.
성능: Set은 요소의 추가, 삭제, 검색 연산을 효율적으로 수행할 수 있도록 설계되어 있습니다. 구체적인 구현체에 따라 다르지만, 일반적으로 평균적인 시간 복잡도가 O(1)인 연산들이 많습니다.
리스트나 배열은 순서가 있기 때문에 인데스를 통한 요소에 접근이 가능하지만 집합은 순서가 없기 때문에 인덱스가 없다
교집합 구하기
public static void main(String[] args) {
HashSet<Integer> set1 = new HashSet<>(Arrays.asList(1,2,3,4,5,6));
HashSet<Integer> set2 = new HashSet<>(Arrays.asList(4,5,6,7,8,9));
HashSet<Integer> intersection = new HashSet<>(set1);
intersection.retainAll(set2);// 교집합 수행
System.out.println(intersection); // [4,5,6]
}
두개의 HashSet을 만들고 새로운 set에 set1을 넣음
retainAll 을 실행해 중복된 값을 남기고 나머지를 지워버린다
합집합 구하기
public static void main(String[] args) {
HashSet<Integer> set1 = new HashSet<>(Arrays.asList(1,2,3,4,5,6));
HashSet<Integer> set2 = new HashSet<>(Arrays.asList(4,5,6,7,8,9));
HashSet<Integer> intersection = new HashSet<>(set1);
intersection.addAll(set2);// 합집합 수행
System.out.println(intersection); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
}
addALl 을 사용해 두 해시셋에 합집합을 intersection에 넣어 주었다
차집합 구하기
public static void main(String[] args) {
HashSet<Integer> set1 = new HashSet<>(Arrays.asList(1,2,3,4,5,6));
HashSet<Integer> set2 = new HashSet<>(Arrays.asList(4,5,6,7,8,9));
HashSet<Integer> intersection = new HashSet<>(set1);
intersection.removeAll(set2);// 차집합 수행
System.out.println(intersection); // [1, 2, 3]
}
set1이 intersection안에 있고 set2를 removeAll() 을 사용해 없애 주었으니 출력결과가 1,2,3 이 나온다
add
public static void main(String[] args) {
HashSet<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
System.out.println(set);// [1,2,3]
}
add로 set에 요소를 삽입할 수 있다
addAll
public static void main(String[] args) {
HashSet<Integer> set = new HashSet<>();
set.addAll(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
System.out.println(set);// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
//HashSet<Integer> set = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
// 위와 같이 한줄로 가능함
}
addAll을 사용해 요소들을 한번에 넣어줄수있다
remove
public static void main(String[] args) {
HashSet<Integer> set = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
set.remove(1);
set.remove(2);
set.remove(3);
ArrayList<Integer> nums = new ArrayList<>(Arrays.asList(4, 5, 6, 7, 8, 9, 10));
set.removeAll(nums); // 여러요소 삭제
System.out.println(set);// []
remove로 하나씩 삭제 removeAll로 여러개의 요소 삭제 가능