Set 컬렉션 클래스의 특징
- 요소의 저장 순서가 없다.
- 요소의 중복을 허용하지 않는다.
대표적인 클래스
- HashSet<\E>
- TreeSet<\E>
HashSet
- 가장 많이 사용되는 클래스로, 해시 알고리즘을 사용하여 검색 속도가 빠르다.
- 만약 요소의 저장 순서를 유지해야 한다면 JDK 1.4부터 제공하는 LinkedHashSet 클래스를 사용하자.
import java.util.HashSet;
public class Main {
public static void main(String[] args) {
HashSet<String> hs = new HashSet<>();
// add(): 요소 저장
hs.add("해시");
hs.add("셋");
hs.add("hash");
hs.add("set");
hs.add("set");
for (String s : hs) {
System.out.println(s);
}
// 해시
// set
// 셋
// hash
// 순서도 다르고, "set"을 중복으로 추가했지만 하나만 존재한다.
}
}
해시 알고리즘(hash algorithm)
- 해시 함수(hash function)를 사용하여
- 데이터를 해시 테이블(hash table)에 저장하고,
- 검색할 수 있는 알고리즘이다.
자바에서 해시 알고리즘을 이요한 자료구조는 배열과 연결리스트로 구현된다.
저장할 데이터의 키값을 해시 함수에 넣어 반환되는 값으로 배열의 인덱스를 구하고,
해당 인덱스에 저장된 연결리스트에 데이터를 저장한다.
TreeSet
- 데이터가 정렬된 상태로 저장되는 "이진 검색 트리(binary search tree)" 형태로 요소를 저장한다.
- Set 인터페이스를 구현하므로, 요소를 순서에 상관없이 저장하고 중복된 값은 저장하지 않는다.
import java.util.TreeSet;
public class Main {
public static void main(String[] args) {
TreeSet<Integer> hs = new TreeSet<>();
// add(): 요소 저장
hs.add(10);
hs.add(3);
hs.add(6);
hs.add(1);
hs.add(15);
for ( Integer n : hs) {
System.out.print(n + " ");
// 1 3 6 10 15
// 요소들은 모두 정렬된 상태로 저장된다.
}
}
}
Set 인터페이스 주요 메소드
- Set 인터페이스는 Collection 인터페이스를 상속받으므로, Collection 인터페이스에서 정의한 메소드도 모두 사용이 가능하다.
'Java' 카테고리의 다른 글
[Java] String VS StringBuffer (0) | 2022.10.01 |
---|---|
[Java] Map 컬렉션 클래스 (0) | 2022.09.28 |
[Java] Deque (0) | 2022.09.24 |
[Java] Stack & Queue (0) | 2022.09.23 |
[Java] List 컬렉션 클래스 (0) | 2022.09.21 |