버글버글

Java 수업 기록 (17) Collection Framework - Set 본문

java/java 수업 기록

Java 수업 기록 (17) Collection Framework - Set

Bugle 2022. 8. 9. 15:00
반응형

▶ 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으로 중복 삭제후, 출력

 

 

반응형