Set 컬렉션
포스트
취소

Set 컬렉션

특징

  • 요소의 저장 순서를 유지하지 않는다.
  • 같은 요소의 중복 저장을 허용하지 않는다.

Set 인터페이스 메소드

  • add(E e)
    • 해당 집합에 전달된 요소를 추가한다.
  • clear()
    • 해당 집합의 모든 요소를 제거한다.
  • contains(Object o)
    • 해당 집합이 전달된 객체를 포함하고 있는지를 확인한다.
  • equals(Object o)
    • 해당 집합과 전달된 객체가 같은지를 확인한다.
  • isEmpty()
    • 해당 집합이 비어있는지를 확인한다.
  • iterator()
    • 해당 집합의 반복자(iterator)를 반환한다.
  • remove(Object o)
    • 해당 집합에서 전달된 객체를 제거한다.
  • size()
    • 해당 집합의 요소의 총 개수를 반환한다.
  • toArray()
    • 해당 집합의 모든 요소를 Object 타입의 배열로 반환한다.

HashSet<E> 클래스

  • Set 컬렉션 클래스에서 가장 많이 사용되는 클래스 중 하나
  • 해시 알고리즘(hash algorithm)을 사용하여 검색 속도가 매우 빠르다.
  • 내부적으로 HashMap 인스턴스를 이용하여 요소를 저장한다.
  • 요소를 순서에 상관없이 저장하고 중복된 값은 저장하지 않는다.
    • Set 인터페이스를 구현했기 때문에
  • JDK 1.2부터 제공
  • 만약 요소의 저장 순서를 유지해야 한다면 LinkedHashSet 클래스를 사용하면 된다.
    • JDK 1.4부터 제공
  • 사용 예시
HashSet<String> hs01 = new HashSet<String>();
HashSet<String> hs02 = new HashSet<String>();

//add() 메소드를 이용한 요소의 저장
hs01.add("홍길동");
hs01.add("이순신");
System.out.println(hs01.add("임꺽정"));
System.out.println(hs01.add("임꺽정")); // 중복된 요소의 저장

//Enhanced for 문과 get() 메소드를 이용한 요소의 출력
for (String e : hs01) {
    System.out.print(e + " ");
}

//add() 메소드를 이용한 요소의 저장
hs02.add("임꺽정");
hs02.add("홍길동");
hs02.add("이순신");

//iterator() 메소드를 이용한 요소의 출력
Iterator<String> iter02 = hs02.iterator();
while (iter02.hasNext()) {
    System.out.print(iter02.next() + " ");
}

//size() 메소드를 이용한 요소의 총 개수
System.out.println("집합의 크기 : " + hs02.size());

해시 알고리즘(hash algorithm)

  • 해시 함수(hash function)를 사용하여 데이터를 해시 테이블(hash table)에 저장하고, 다시 그것을 검색하는 알고리즘
  • Java에서 해시 알고리즘을 이용한 자료구조는 배열과 연결 리스트로 구현된다.
  • 저장할 데이터의 키값을 해시 함수에 넣어 반환되는 값으로 배열의 인덱스를 구한다.
  • 그리고서 해당 인덱스에 저장된 연결 리스트에 데이터를 저장하게 된다.

TreeSet<E> 클래스

  • 데이터가 정렬된 상태로 저장되는 이진 검색 트리(binary search tree)의 형태로 요소를 저장한다.
  • 이진 검색 트리는 데이터를 추가하거나 제거하는 등의 기본 동작 시간이 매우 빠르다.
  • NavigableSet 인터페이스를 기존의 이진 검색 트리의 성능을 향상시킨 레드-블랙 트리(Red-Black tree)로 구현한다.
  • 요소를 순서에 상관없이 저장하고 중복된 값은 저장하지 않는다.
    • Set 인터페이스를 구현했기 때문에
  • JDK 1.2부터 제공된다.
  • 사용 예시
TreeSet<Integer> ts = new TreeSet<Integer>();

//add() 메소드를 이용한 요소의 저장
ts.add(30);
ts.add(40);
ts.add(20);
ts.add(10);

//Enhanced for 문과 get() 메소드를 이용한 요소의 출력
for (int e : ts) {
    System.out.print(e + " ");
}

//remove() 메소드를 이용한 요소의 제거
ts.remove(40);

//iterator() 메소드를 이용한 요소의 출력
Iterator<Integer> iter = ts.iterator();
while (iter.hasNext()) {
    System.out.print(iter.next() + " ");
}

//size() 메소드를 이용한 요소의 총 개수
System.out.println("이진 검색 트리의 크기 : " + ts.size());

//subSet() 메소드를 이용한 부분 집합의 출력
System.out.println(ts.subSet(10, 20));
System.out.println(ts.subSet(10, true, 20, true));
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.