Collection Framework (SET)

이규현·2024년 8월 26일

자바가 제공하는 Set

Set 자료구조

Set 자료구조: 중복을 허용하지 않고 순서가 보장되지 않는 자료구조

자바의 Set 인터페이스는 java.util 패키지의 컬렉션 프레임워크에 속하는 인터페이스 중 하나이다. Set인터페이스는중복을허용하지않는유일한요소의집합을나타낸다. 즉,어떤요소도같은 Set 내에두번이상나타날수없 다. Set은 수학적 집합 개념을 구현한 것으로, 순서를 보장하지 않으며, 특정 요소가 집합에 있는지 여부를 확인하는 데 최적화되어 있다.

HashSet

  • hash 자료구조 이용
  • 순서없이 저장
  • O(1)의 시간복잡도
  • 용도: 데이터의 유일성이 중요할 때 사용
    ex:
    data가 1,2,5,8,14,99가 입력 --> hashIndex() : data % capacity --> 이 연산을 통한 hashIndex를 배열의 index로 사용

LinkedHashSet

  • HashSet에 연결리스트 추가
  • 추가된 순서대로 저장
  • O(1)의 시간복잡도
  • 용도: 데이터 유일성(Hash)을 중요시하는 동시에 삽입된 순서를 유지
    ex:
  • HashSet과 동일하지만 삽입 순서대로 노드가 연결되어 있음

TreeSet

  • 자식이 2개까지 올 수 있다: 이진트리
  • Node의 왼쪽이 작은 값, 오른쪽이 큰 값: 이진 탐색 트리

트리구조 구현

DoublyLinkedList와 같이 prev -> left, next-> right를 가진 자료구조이다. 각 Node.leftNode.right는 자식 노드의 참조값을 가진다.

Set 사용하기

Integer[] inputArr = {30,20,20,10,10}; 
//다음 정수들이 입력됨, 중복 값을 제거하고 값을 출력하기(출력 순서는 관계X)
//HashSet
Set<Integer> set = new HashSet<>();
for(Integer s : inputArr){
	set.add(s);
}
for(Integer s : set){
	System.out.println(s);
}
  • HashSet을 사용하면 중복 데이터 저장 X
  • 단순히 HashSet에 값 입력 후 HashSet 출력
  • HashSet 순서를 보장X
Integer[] inputArr = {30,20,20,10,10};
//다음 정수들이 입력됨, 중복 값을 제거하고 값을 출력하기(입력순서대로 출력!)
//LinkedHashSet
Set<Integer> set = new LinkedHashSet<>(List.of(inputArr));
for(Integer s : set){
   System.out.println(s);
}
  • 입력 순서대로 출력하기 위해 LinkedHashSet사용
  • 배열을 Set에 입력할 때 직접 배열을 반복하며 입력해도 괜찮지만 배열을 List로 변환해 전달할 수 있다.
  	//배열을 리스트로 변환하기
    List<Integer> list = Arrays.asList(inputArr);
    List<Integer> list = List.of(inputArr);
    //편리한 리스트 생성
    List<Integer> list = Arrays.asList(1,2,3);
    List<Integer> list = List.of(1,2,3);
  Integer[] inputArr = {30,20,20,10,10}; 
  //다음 정수들이 입력됨, 중복 값을 제거하고 값을 출력하기(데이터의 값 순서대로)
  //TreeSet
  TreeSet<Integer> tree = new TreeSet<>();
      for(Integer s : inputArr){
            tree.add(s);
      }
      for(Integer s : tree){
           System.out.println(s);
      }
  • 데이터의 값 순서대로 출력하려면 TreeSet사용

Set인터페이스의 주요 메소드

0개의 댓글