버글버글
Java 수업 기록 (17) Collection Framework - Set 본문
반응형
▶ set 인터페이스
1. 제네릭(Generic) 기반
2. list와 다를게 없다.
3. 집합을 관리하기 위한 자료 구조
4. 중복된 요소가 저장되지 않는 특성을 가짐
5. 해시(Hash)를 이용하기 때문에 삽입, 삭제, 검색이 빠름
import java.util.HashSet;
import java.util.Set;
* HashSet 주요메소드
메소드 | 역할 |
boolean add(E element) | element 추가. 성공하면 true 반환 |
boolean addAll(Collection <? extends E> c) | 컬렉션 c의 모든 요소 추가. 성공하면 true 반환 |
void clear() | 모든 요소 제거 |
boolean contains(Object o) | 객체 o를 포함하고 있으면 true 반환 |
boolean isEmpty() | 비어 있으면 true 반환 |
boolean remove(Object o) | 객체 o와 동일한 요소 제거. 성공하면 true 반환 |
boolean removeAll(Collection < ? extends E > c) | 컬렉션 c와 동일한 모든 요소 제거. 성공하면 true 반환 |
int size() | 요소들의 개수 반환 |
Object[] toArray() | 세트의 모든 요소들을 포함하는 Object 타입의 배열 반환 |
* 생성
Set<String> set = new HashSet<String>();
* 요소 추가
Set<String> set = new HashSet<String>();
set.add("일");
set.add("월");
set.add("화");
set.add("수");
System.out.println(set); // [월, 화, 수, 일]
// 순서가 없다 = index가 없다.
* 요소의 중복 저장 불가능
Set<String> set = new HashSet<String>();
set.add("일");
set.add("월");
set.add("화");
set.add("수");
set.add("수"); // 중복 저장 시도
// 세트 확인
System.out.println(set); // [월, 화, 수, 일]
* 요소 제거
Set<String> set = new HashSet<String>();
set.add("일");
set.add("월");
set.add("화");
set.add("수");
boolean result = set.remove("일");
System.out.println(result); // true
System.out.println(set); // [월, 화, 수]
* 세트의 초기화
1. 리스트를 세트로 변환하는 방식으로 초기화 진행
Set<String> set = new HashSet<String>(Arrays.asList("일", "월", "화", "수"));
* 세트의 길이
Set<String> set = new HashSet<String>(Arrays.asList("일", "월", "화", "수"));
int size = set.size();
System.out.println(size); // 4
* 향상 for문(인덱스가 없으므로 일반 for문 불가능)
Set<String> set = new HashSet<String>(Arrays.asList("일", "월", "화", "수"));
for(String element : set) {
System.out.println(element);
}
// 월 화 수 일
*교집합
- 교집합 결과는 retainAll() 메소드를 호출한 Set에 저장
Set<Integer> set1 = new HashSet<Integer>(Arrays.asList(1, 2, 3, 4, 5));
Set<Integer> set2 = new HashSet<Integer>(Arrays.asList(3, 4, 5, 6, 7));
set1.retainAll(set2); // 교집합
System.out.println(set1); // [3, 4, 5]
*합집합
- 합집합 결과는 addAll() 메소드를 호출한 Set에 저장
Set<Integer> set1 = new HashSet<Integer>(Arrays.asList(1, 2, 3, 4, 5));
Set<Integer> set2 = new HashSet<Integer>(Arrays.asList(3, 4, 5, 6, 7));
set1.addAll(set2);
System.out.println(set1); // [1, 2, 3, 4, 5, 6, 7]
*차집합
- 차집합 결과는 removeAll() 메소드를 호출한 Set에 저장
Set<Integer> set1 = new HashSet<Integer>(Arrays.asList(1, 2, 3, 4, 5));
Set<Integer> set2 = new HashSet<Integer>(Arrays.asList(3, 4, 5, 6, 7));
set1.removeAll(set2);
System.out.println(set1); // [1, 2]
* 부분집합 여부 판단
Set<Integer> set1 = new HashSet<Integer>(Arrays.asList(1, 2, 3, 4, 5));
Set<Integer> set2 = new HashSet<Integer>(Arrays.asList(3, 4, 5, 6, 7));
Set<Integer> set3 = new HashSet<Integer>(Arrays.asList(6, 7));
boolean result1 = set1.containsAll(set3); // set3가 set1의 부분집합이면 true
boolean result2 = set2.containsAll(set3); // set3가 set2의 부분집합이면 trye
System.out.println(result1);
System.out.println(result2);
* 중복 요소가 있는 리스트 → 세트 변환 → 다시 리스트로 변환
List<String> list = new ArrayList<String>();
list.add("일");
list.add("월");
list.add("화");
list.add("화");
Set<String> set = new HashSet<String>(list);
list.clear(); // list 요소 모두 제거
list = new ArrayList<String>(set);
System.out.println(list); // [월, 화, 일]
// list 요소가 없어지고 set으로 중복 삭제후, 출력
반응형
'java > java 수업 기록' 카테고리의 다른 글
Java 수업 기록 (19) Collection Framework - maping, treemap (0) | 2022.08.11 |
---|---|
Java 수업 기록 (18) Collection Framework - Hash (0) | 2022.08.10 |
Java 수업 기록 (16) Collection Framework - ArrayList (0) | 2022.08.08 |
Java 수업 기록 (15) Exception (0) | 2022.08.07 |
Java 수업 기록 (14) 상속-Interface (0) | 2022.08.05 |