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 라이센스를 따릅니다.