컬렉션 프레임워크_Set

이동건 (불꽃냥펀치)·2024년 12월 6일
0

Java가 제공하는 Set

Set 인터페이스

자바의 Set인터페이스는 자바 패키지의 컬렉션 프레임워크에 속하는 인터페이스 중 하나이다. Set인터페이스는 중복을 허용하지 않는 유일한 요소의 집합을 나타낸다. Set은 순서를 보장하지 않으며, 특정 요소가 집합에 있는지 여부를 확인하는데 최적화 되어있다.

Set인터페이스는 HashSet,LinkedHashSet,TreeSet등의 여러 구현 클래스를 가지고 있으며 각 클래스는 Set과 각각의 특성을 가지고 있다.


주요 메서드

add(E e) 지정된요소를세트에추가한다(이미존재하는경우추가하지 음).
addAll(Collection<? extends E> c) : 지정된 컬렉션의 모든 요소를 세트에 추가한다.
contains(Object o : 세트가지정된요소를포함하고있는지여부를반환한다.
remove(Object o): 지정된요소를세트에서제거한다.
containsAll(Collection<?> c): 세트가 지정된 컬렉션의 모든 요소를 포함하고 있는지 여부를 환한다.
removeAll(Collection<?> c): 지정된 컬렉션에 포함된 요소를 세트에서 모두 제거한다.
retainAll(Collection<?> c): 지정된컬렉션에포함된요소만을유지하고나머지요소는 세트₩ 에서 제거한다.
clear(): 세트에서 모든 요소를 제거한다.
size(): 세트에 있는 요소의 수를 반환한다.
iterator():세트의 요소에 대한 반복자를 반환한다.
toArray(): 세트의 모든 요소를 배열로 반환한다.
toArray(T[] a): 세트의 모든 요소를 지정된배열로 반환한다.


Set의 주요 구현체

HashSet

  • 구현: 해시 자료구조를 사용해서 요소를 저장한다.
  • 순서: 요소들의 순설르 보장하지 않는다.
  • 시간복잡도: HashSet의 주요 연산은 평균적으로 O(1) 시간 복잡도를 가진다.
  • 용도: 데이터의 유일성만 중요하고 순서가 중요하지 않은 경우에 적합하다.

LinkedHashSet

  • 구현: HashSet에 연결리스트를 추가해서 요소들의 순서를 유지한다.
  • 순서: 요소들은 추가된 순서대로 유지된다.
  • 시간복잡도: LinkedHashSet의 주요 연산은 평균적으로 O(1) 시간 복잡도를 가진다.
  • 용도: 데이터의 유일성과 함께 삽입 순서를 유지해야 할때 적합하다.

TreeSet

  • 구현: TreeSet은 이진 탐색 트리를 개선한 레드-블랙 트리를 내부에서 사용한다.
  • 순서: 요소들은 정렬된 순서로 저장된다. 순서의 기준은 Comparator로 변경할 수 있다.
  • 시간복잡도: LinkedHashSet의 주요 연산은 평균적으로 O(log(n)) 시간 복잡도를 가진다.
  • 용도: 데이터들을 정렬된 순서로 유지하면서 집합의 특성을 유지해야할 때 사용한다. 예를 들어, 범위 검색이나 정렬된 데이터가 필요한 경우에 유용하다.


트리구조

  • 트리는 부모 노드와 자식 노드로 구성된다.
  • 가장 높은 조상을 루트라한다.
  • 자식이 2개까지 올 수 있는 트리를 이진트리라한다.
  • 여기에 노드의 왼쪽 자손은 더 작은 갑을 가지고 오른쪽 자손은 더 큰값을 가지는 것을 이진탐색트리라한다.



예제

import java.util.*;
  public class JavaSetMain {
      public static void main(String[] args) {
          run(new HashSet<>());
          run(new LinkedHashSet<>());
          run(new TreeSet<>());
}
      private static void run(Set<String> set) {
          System.out.println("set = " + set.getClass());
          set.add("C");
          set.add("B");
          set.add("A");
          set.add("1");
          set.add("2");
          Iterator<String> iterator = set.iterator();
          while (iterator.hasNext()) {
              System.out.print(iterator.next() + " ");
          }
          System.out.println();
      }
}
  • HashSet,LinkedHashSet,TreeSet모두 Set 인터페이스를 구현하기 때문에 구현체를 변경하면서 실행할 수 있다.

  • iterator()를 호출하면 컬렉션을 반복해서 출력할 수 있다.

    • iterator.hasNext(): 다음 데이터가 있는지 확인한다.
    • iterato.nwxt(): 다음 데이터를 반환한다.








출처: https://www.inflearn.com/course/%EA%B9%80%EC%98%81%ED%95%9C%EC%9D%98-%EC%8B%A4%EC%A0%84-%EC%9E%90%EB%B0%94-%EC%A4%91%EA%B8%89-2/dashboard

profile
자바를 사랑합니다

0개의 댓글

관련 채용 정보