[Java] 컬렉션 프레임워크 - Set 인터페이스
Set, SortedSet
Set 인터페이스는 집합의 특성을 가지는 인터페이스이다. Set 인터페이스를 구현하는 클래스들은 저장 순서가 유지되지 않고 데이터의 중복 저장을 허용하지 않는 공통적인 특성이 있다.
SortedSet 인터페이스는 Set을 상속한 인터페이스로 원소들이 정렬되어있는 Set이다.
HashSet
가장 기본적인 Set의 구현 클래스로, 저장 순서가 유지되지 않고 데이터의 중복 저장이 허용되지 않는다.
hash에 의해 데이터 위치를 특정시켜 해당 데이터를 빠르게 색인할 수 있어 삽입, 삭제, 색인이 매우 빠른 컬렉션 중 하나이다.
중복 저장을 허용하지 않다는 것은 내부적으로 동일한 데이터를 판단하는 기준이 있다는 것이다. HashSet의 경우는 Object 클래스의 equals 메서드와 hashCode 메서드를 사용하여 동일 인스턴스 여부를 판단한다.
LinkedHashSet
LinkedList와 HashSet이 결합된 형태로, 데이터의 중복 저장은 허용하지 않지만 저장 순서를 보장한다.저장 순서를 보장하므로 저장된 순서대로 반복한다.
TreeSet
SortedSet의 구현 클래스로 Binary Tree 자료구조를 기반으로 인스턴스를 저장한다. 저장 순서가 유지되지 않고 데이터의 중복 저장이 허용되지 않지만 정렬된 상태가 유지되면서 인스턴스가 저장된다.
class Person implements Comparable<Person> {
private int age;
@Override
public int compareTo(Person p) {
return this.age - p.age;
}
}
TreeSet<Person> tree = new TreeSet<>();
class PersonComparator implements Comparator<Person> {
@Override
public int compare(Person p1, Person p2) {
return p2.age - p1.age;
}
}
TreeSet<Person> tree = new TreeSet<>(new PersonComparator());
정렬 기준으로 입력받은 클래스에 Comparable<T> 인터페이스의 compareTo 메서드를 구현하거나 일시적으로 기준을 바꿔야 할 경우는 Comparator<T> 인터페이스를 구현한 클래스를 TreeSet의 생성자의 인자로 넣어준다.
참조
윤성우의 열혈 JAVA 프로그래밍
https://st-lab.tistory.com/142
https://docs.oracle.com/javase/tutorial/collections/interfaces/index.html