Java - Set 인터페이스 및 관련 클래스
Set 인터페이스
Set 인터페이스는 단일 데이터를 저장하는 Collection으로써, 중복된 데이터 저장을 허용하지 않고 순서가 보장되지 않는다. Set에서 새로 선언된 메소드는 없다. List 인터페이스를 구현한 하위 클래스로는 TreeSet
, HashSet
이 있다.
- Set
- SortedSet
- TreeSet
- HashSet
SortedSet 인터페이스
Set
인터페이스를 상속 받은 인터페이스로는 SortedSet
인터페이스가 있는데, SortedSet
인터페이스가 있는데, SortedSet
인터페이스에서는 오름 차순으로 정렬하여 데이터를 보관할 수 있다.
SortedSet 메소드
메소드 | 설명 |
---|---|
Comparator<? super E> comparator() |
SortedSet의 설정된 Comparator(비교기)를 반환한다. 설정한 null이 반환되고 있다면 설정된 Comparator가 반환된다. |
E first() |
SortedSet의 첫번째 객체를 반환한다. |
SortedSet<E> headSet(E toElement) |
toElement 객체보다 작은 객체의 부분으로 구성한 SortedSet 객체를 반환한다. |
E last() |
SortedSet의 마지막 객체를 반환한다. |
SortedSet<E> subSet(E fromElement, E toElement) |
toElement(포함)보다 크고, fromElement(제외)보다 작은 객체로 구성한 SortedSet 객체를 반환하다. |
SortedSet<E> tailSet(E fromElement) |
fromElement(포함)보다 큰 객체로 구성한 SortedSet을 반환한다. |
HashSet 클래스
HashSet
은 AbstractSet
을 확장하고 Set
인터페이스를 구현한다. 저장소에 해시 테이블을 사용하는 Collection을 만든다.
해시 테이블은 해싱(Hashing)이라는 메커니즘을 사용하여 정보를 저장한다. 해시 테이블 저장소는 데이터를 저장하기 위해서 유일하게 구분되는 key 값과 value를 한 세트로 하여 저장하게 된다. 이 때 key 값은 개발자가 부여하는 것이 아니라 코드에서 자동으로 처리된다. 저장된 데이터를 순차적으로 관리하는 것이 아니라 hash code로 구분하여 저장되기 때문에 index를 이용하여 key값에 접근할 수 없다. 해싱에서는 해시 코드라는 고유 한 값을 결정하기 위해 키의 정보 콘텐츠가 사용된다. 해싱을 이용하게 되면 순차적으로 데이터를 관리하는 것보다 많은 양의 데이터를 관리할 때 추가, 삭제, 검색 등에서 속도가 향상된다.
HashSet
은 정렬 기능을 지원하지 않기 때문에, 정렬기능을 지원하기 위해서는 SortedSet을 구현한 TreeSet 클래스를 사용하도록 하자.
HashSet 예제
package com.devkuma.tutorial.java.util;
import java.util.HashSet;
import java.util.Set;
public class HashSetClass {
public static void main(String[] args) {
Set<Integer> hs = new HashSet<Integer>();
hs.add(85);
hs.add(67);
hs.add(58);
hs.add(30);
hs.add(46);
for (Integer i : hs) {
System.out.println(i);
}
}
}
실행 결과는 아래와 같다.
67
85
58
30
46
TreeSet 클래스
TreeSet은 Set 인터페이스와 SortedSet 인터페이스를 구현한 클래스이다. 정렬 기능을 지원하며, 트리 형태로 데이터를 관리한다. 요소가 저장될 때 오름차순으로 정렬되어 저장되기 때문에 데이터를 얻어 속도가 떨어지지는 않는다.
TreeSet 예제
package com.devkuma.tutorial.java.util;
import java.util.Set;
import java.util.TreeSet;
public class TreeSetClass {
public static void main(String[] args) {
Set<Integer> ts = new TreeSet<Integer>();
ts.add(85);
ts.add(67);
ts.add(58);
ts.add(30);
ts.add(46);
for (Integer i : ts) {
System.out.println(i);
}
}
}
실행 결과는 아래와 같다.
30
46
58
67
85
이전 HashSet 클래스와는 달리 저장된 데이터를 정렬한 후에 출력해 준다.