자바 자료구조#12. Set

A Kind Dev·2023년 1월 30일
0

자바 자료구조

목록 보기
14/20

Set

  • 집합
  • 중복된 값을 허용하지 않는다.
  • 이미 존재하는 데이터인지 어떻게 알지?
    Search가 필요!
    " Set = 선형 데이터구조 + 탐색 알고리즘 "
  • Set은 순서를 보장하지 않는다.

HashSet, LinkedHashSet, TreeSet

  • java.lang.Object (>) java.util.AbstractCollection (>) java.util.AbstractSet (>) java.util.HashSet
  • HashSet을 implements 하는 인터페이스 : Set
  • 동기화 지원하지 않음
  • 내부에서 HashTable을 사용하여 이미 같은 값이 존재하는지 확인 (bucket)
    => 객체를 저장할 경우 hashCode를 구현해줘야 함
  • 이외에 LinkedHashSet, TreeSet 있음
    각각 LinkedList, binary search Tree를 사용하여 만들어져 있음
  • HashSet의 경우 정렬을 해주지 않고 TreeSet의 경우 오름차순으로 자동정렬을 해준다는 차이점이 있다. LinkedHashSet은 입력된 순서대로 데이터를 관리한다.


Set 기본함수

  • Set 선언
HashSet<Integer> set = new HashSet<>();
  • Set 값 추가
set.add(1);
set.add(2);
  • 값 제거
set.remove(1);


List의 중복 요소 제거

List<String> list = Arrays.asList("A", "B", "C", "A", "B", "C");
Set<String> set = new HashSet<>(list);
List<String> list2 = new LinkedList<>(set);


집합

  • 합집합
Set<Integer> setA = new LinkedHashSet<>();

// A
setA.add(1);
setA.add(2);
setA.add(3);

// B
setA.add(2);
setA.add(3);
setA.add(4);

=> setA : [1, 2, 3, 4]
  • 차집합
Set<Integer> setA = new LinkedHashSet<>();
Set<Integer> setB = new LinkedHashSet<>();

// A
setA.add(1);
setA.add(2);
setA.add(3);

// B
setB.add(2);
setB.add(3);
setB.add(4);

setA.removeAll(setB);

=> setA : [1]
  • 교집합
Set<Integer> setA = new LinkedHashSet<>();
Set<Integer> setB = new LinkedHashSet<>();

// A
setA.add(1);
setA.add(2);
setA.add(3);

// B
setB.add(2);
setB.add(3);
setB.add(4);

setA.retainAll(setB);

=> setA : [2, 3]
profile
친절한 개발자

0개의 댓글