[Java] Set

qqqqlss·2022년 11월 23일
0

Set - 합처럼 중복되지 않는 원소들의 모음을 만들 수 있는 자료구조
Set에는 크게 TreeSet, HashSet, LinkedHashSetdl 있음

HashSet

특징

  • Hash Table 구조 기반.
  • HashMap을 이용하여 구현되므로, HashMap의 장점과 특징을 그대로 계승.
    사용용도
  • index가 아닌 key를 이용하여 데이터 저장과 접근이 필요할 경우 사용.
  • 데이터의 크기가 어느 정도 예상되는 경우 사용한다.
    삽입 삭제가 빈번할 경우 사용한다.
import java.util.HashSet;
//HashSet의 생성
HashSet<String> set = new HashSet<>();
// 데이터 삽입
set.add("코드라떼");
// 값 포함 여부 확인
set.contains("코드라떼");	//true
// 데이터 삭제
set.remove("코드라떼");
// 데이터 출력
for (String value : set) {	// 정렬 X
    System.out.println(value);
}

TreeSet

특징

  • Tree 구조 기반.
  • TreeMap을 이용하여 구현되므로, TreeMap의 장점과 특징을 그대로 계승.
    사용용도
  • 저장되는 데이터의 개수가 몇 개인지 예상되지 않는 경우 사용.
  • 삽입과 삭제가 빈번하지 않을 때 사용.
  • 정렬된 값이 필요할 때 사용.
import java.util.TreeSet;
//TreeSet의 생성
TreeSet<String> set = new TreeSet<>();
// 데이터 삽입
set.add("코드라떼");
// 값 포함 여부 확인
set.contains("코드라떼");
// 데이터 삭제
set.remove("코드라떼");
// 출력
for (String value : set) {	//저장된 값은 오름차순으로 정렬되어 출력
    System.out.println(value);
}

LinkedHashSet

특징

  • HashSet을 상속받아 구현. LinkedHashMap 이용하여 LinkedHashMap의 특징 그대로 계승.
    사용용도
  • 값의 저장된 순서가 중요할 때 사용.
import java.util.LinkedHashSet;
//LinkedHashSet의 생성
LinkedHashSet<String> set = new LinkedHashSet<>();
//데이터 삽입
set.add("코드라떼");

//값 포함 여부 확인
set.contains("roka");

// 데이터 삭제
set.remove("카페라떼");

// 출력
for (String value : set) {	// 저장된 순서대로 출력
    System.out.println(value);
}

집합 연산

// A 집합
List<String> set1 = Arrays.asList("1", "2", "3", "4", "5");
TreeSet<String> A = new TreeSet<>(set1);

// B 집합
List<String> set2 = Arrays.asList("3", "4", "5", "6", "7");
TreeSet<String> B = new TreeSet<>(set2);

// C 집합
List<String> set3 = Arrays.asList("3", "4");
TreeSet<String> C = new TreeSet<>(set3);

//부분집합
B.containsAll(C)	//C가 B의 부분집합인지
B.contains("7")	//B가 7을 포함하는지

//교집합	원본의 데이터를 변경 (원본데이터 손실 원하지 않으면 원본 복사 필요)
TreeSet<String> cloneA = new TreeSet<>(set1);
boolean isModified = cloneA.retainAll(B);	//cloneA 변경 여부 반환

//합집합	원본의 데이터를 변경 (원본데이터 손실 원하지 않으면 원본 복사 필요)
cloneA.addAll(B);

//차집합	원본의 데이터를 변경 (원본데이터 손실 원하지 않으면 원본 복사 필요)
cloneA.removeAll(B);
profile
studying

0개의 댓글