JAVA의 Set 컬렉션 클래스
모든 Set 컬렉션 클래스는 다음과 같은 특징을 가진다.
1. 요소의 저장 순서를 유지하지 않는다.
2. 같은 요소의 중복 저장을 허용하지 않는다.
대표적인 Set 컬렉션 클래에서 속하는 클래스는 다음과 같다.
1. HashSet<E>
2. TreeSet<E>
HashSet<E> 클래스
HashSet 클래스는 Set 컬렉션 클래스에서 가장 많이 사용되는 클래스 중 하나이고, 해시 알고리즘을 사용하여 검색 속도가 매우 빠르다.
이러한 HashSet 클래스는 내부적으로 HashMap 인스턴스를 이용하여 요소를 저장한다.
만약 요소의 저장 순서를 유지해야 한다면 LinkedHashSet 클래스를 사용하면 된다.
예제 코드
public class Set {
public static void main(String[] args) {
// TODO Auto-generated method stub
HashSet<String> hs01 = new HashSet<String>();
HashSet<String> hs02 = new HashSet<String>();
//add() 요소 저장
hs01.add("aaa");
hs01.add("bbb");
System.out.println(hs01.add("ccc"));
System.out.println(hs01.add("ccc")); //중복된 요소 저장
//Enhanced for문과 get() 메소드를 이용한 요소의 출력
for(String e : hs01) {
System.out.print(e + " ");
}
System.out.println();
hs02.add("bbb");
hs02.add("ccc");
hs02.add("aaa");
//iterator() 메소드를 이용한 요소 출력
Iterator<String> iter02 = hs02.iterator();
while(iter02.hasNext()) {
System.out.print(iter02.next()+" ");
}
System.out.println();
System.out.println("집합의 크기 : "+hs02.size());
}
}
-> 요소의 저장 순서를 바꿔도 저장되는 순서에는 영향을 미치지 않는 것을 알 수 있다.
-> add() 메소드를 사용하여 이미 존재하는 요소를 추가하려고 하면, 해당 요소를 저장하지 않고 false를 반환하는 것을 알 수 있다.
TreeSet<E> 클래스
TreeSet 클래스는 데이터가 정렬된 상태로 저장되는 이진 검색 트리의 형태로 요소를 저장한다.
예제 코드
public class Set2 {
public static void main(String [] args) {
TreeSet<Integer> ts = new TreeSet<Integer>();
//add() 요소 저장
ts.add(50);
ts.add(20);
ts.add(60);
ts.add(10);
for(int e : ts) {
System.out.print(e + " ");
}
System.out.println();
//remove() 메소드를 이용한 요소의 제거
ts.remove(60);
//iterator() 메소드를 이용한 요소의 출력
Iterator<Integer> iter = ts.iterator();
while(iter.hasNext()) {
System.out.print(iter.next() + " ");
}
System.out.println();
//subSet() 메소드를 이용한 부분 집합 출력
System.out.println(ts.subSet(10, 50));
System.out.println(ts.subSet(10, true, 50, false));
System.out.println(ts.subSet(10, true, 50, true));
}
}
* subset(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) 메소드는 element 매개변수의 요소를 포함할지 말지를 boolean 매개변수로 명시한다.
Set 인터페이스 메소드
Set 인터페이스는 Collection 인터페이스를 상속받으므로, Collection 인터페이스에서 정의한 메소드도 모두 사용할 수 있다.
Set 인터페이스에서 제공하는 주요 메소드들
메소드 | 설명 |
boolean add(E e) | 해당 집합(set)에 전달된 요소를 추가함. (선택적 기능) |
void clear() | 해당 집합의 모든 요소를 제거함. (선택적 기능) |
boolean contains(Object o) |
해당 집합이 전달된 객체를 포함하고 있는지를 확인함. |
boolean equals(Object o) |
해당 집합과 전달된 객체가 같은지를 확인함. |
boolean isEmpty() | 해당 집합이 비어있는지를 확인함. |
Iterator<E> iterator() |
해당 집합의 반복자(iterator)를 반환함. |
boolean remove(Object o) |
해당 집합에서 전달된 객체를 제거함. (선택적 기능) |
int size() | 해당 집합의 요소의 총 개수를 반환함. |
Object[] toArray() | 해당 집합의 모든 요소를 Object 타입의 배열로 반환함. |