- 이진 검색 트리를 기반으로 데이터를 저장하는 컬렉션 클래스
: 레드-블랙 트리로 구현- 정렬, 검색, 범위 검색에 특화됨
- 데이터 추가/삭제 시간이 느림
: 데이터 추가 시 저장 위치를 탐색하는 작업을 필요로 하고, 삭제 시에는 트리의 일부를 재구성해야 하기 때문- Set 인터페이스를 구현
: 중복된 데이터의 저장을 허용하지 않고, 저장순서도 유지하지 않음
(항상 정렬된 상태를 유지하기 때문)
java.util.TreeSet의 조상 인터페이스
java.util.Set
인터페이스
- 중복을 허용하지 않고 저장순서가 유지되지 않는 컬렉션 클래스(이하 집합 클래스)를 구현하는 데 사용되는 인터페이스
java.util.SortedSet
인터페이스
- 저장된 객체들을 정렬한 집합 클래스를 다루는 데 필요한 기능들을 정의한 인터페이스
: 범위 검색 기능 정의- 이 인터페이스를 구현할 시 정렬 기준 설정 필수
: 이 인터페이스에 정의된comparator()
메서드를 구현하거나,
이 클래스를 구현한 집합 클래스에 저장될 요소가Comparable
인터페이스를 구현
java.util.NavigableSet
인터페이스
java.util.SortedSet
에 정의된 범위 검색 기능을 확장- 특정 값을 기준으로 한 탐색 기능과 역순 정렬 기능을 추가 정의
java.lang.Cloneable
- 이 인터페이스를 구현한 클래스의 인스턴스는
Object clone()
메서드를 통해 복제될 수 있음
java.io.Serializable
- 이 인터페이스를 구현한 클래스의 인스턴스는 직렬화될 수 있음
cf) java.lang.Cloneable
와 java.io.Serializable
는 마커 인터페이스
java.util.TreeSet의 조상 클래스
java.util.AbstractSet
추상 클래스
- 집합 클래스의 기본 골격을 제공하기 위한 추상 클래스
Set
인터페이스에서 정의된 집합 클래스의 주요 기능을 구현
cf1) java.util.TreeSet
의 모든 메서드는 여기에서 확인 가능
cf2) TreeSet의 주요 기능은 실제 저장하는 객체가 key, 더미 객체가 value인 key-value 쌍을 저장하는 NavigableMap을 사용하여 구현
(더미 객체로는 Object 타입의 객체를 사용)
객체 생성 보조용 생성자
주요 생성자
TreeSet()
- 기본 생성자
- TreeMap을 사용하여 구현
TreeSet(Comparator comp)
- 주어진 정렬조건으로 정렬하는 TreeSet을 생성
TreeSet(Collection c)
- 주어진 컬렉션의 객체들을 저장하는 TreeSet을 생성
TreeSet(SortedSet s)
- 주어진 SortSet을 구현한 컬렉션을 저장하는 TreeSet을 생성
boolean contains(Object o)
- TreeSet이 지정된 객체를 포함하고 있는지를 확인
boolean containsAll(Collection c)
- 지정된 컬렉션에 저장된 모든 객체를 TreeSet이 포함하고 있는지를 확인
java.util.AbstractCollection
에서 구현된 메서드를 그대로 사용
단일 객체 추가
boolean add(Object o)
- 지정한 객체를 TreeSet에 추가
단일 객체 삭제
boolean remove(Object o)
- 지정한 객체를 TreeSet에서 삭제
Object pollFirst()
/Object pollLast()
- TreeSet의 첫번째/마지막 객체를 반환한 후 삭제
- TreeSet이 비어있다면 null을 반환
컬렉션 단위 데이터 추가
boolean addAll(Collection c)
- 지정한 컬렉션에 저장된 모든 객체들을 TreeSet에 추가(합집합 연산)
컬렉션 단위 데이터 삭제
boolean retainAll(Collection c)
- 주어진 컬렉션과 공통된 요소만 남기고 삭제(교집합 연산)
java.util.AbstractCollection
추상 클래스에 구현된 메서드를 그대로 사용
boolean removeAll(Collection c)
- 주어진 컬렉션과 공통된 요소만 삭제(차집합 연산)
java.util.AbstractSet
추상 클래스에 구현된 메서드를 그대로 사용
찾는 객체와 동일한 값 탐색
Object floor(Object o)
- 지정된 객체와 같은 값을 TreeSet에서 찾아서 반환
- 찾는 객체가 없다면 TreeSet의 정렬 순서상 지정된 객체의 바로 앞에 오는 객체를 반환하고, 그래도 없다면 null을 반환
Object ceiling(Object o)
- 지정된 객체와 같은 값을 TreeSet에서 찾아서 반환
- 찾는 객체가 없다면 TreeSet의 정렬 순서상 지정된 객체의 바로 뒤에 오는 객체를 반환하고, 그래도 없다면 null을 반환
찾는 객체보다 작은 값 탐색
Object lower(Object o)
- 지정한 객체보다 작은 값을 갖는 객체 중 제일 가까운 값의 객체를 반환하고, 없다면 null을 반환
- TreeSet의 정렬 순서상 지정한 객체 바로 이전에 나열되는 객체를 탐색
찾는 객체보다 큰 값 탐색
Object higher(Object o)
- 지정한 객체보다 큰 값을 갖는 객체 중 제일 가까운 값의 객체를 반환하고, 없다면 null을 반환
- TreeSet의 정렬 순서상 지정한 객체의 바로 다음에 나열되는 객체를 탐색
최대값/최소값 탐색
Object first()
/Object last()
- TreeSet의 정렬 순서상 첫번째/마지막 객체를 반환
- TreeSet이 비어 있으면
NoSuchElementException
발생
SortedSet 인터페이스의 메서드 구현
SortedSet headSet(Object toElement)
- 지정된 객체보다 작은 값을 갖는 객체들을 반환
SortedSet tailSet(Object fromElement)
- 지정된 객체보다 큰 값을 갖는 객체들을 저장하는, TreeSet의 부분집합을 반환
SortedSet subSet(Object fromElement, Object toElement)
- fromElement와 toElement 사이의 값을 갖는 객체들을 반환
- toElement는 범위에 미포함
NavigableSet 인터페이스의 메서드 구현
NavigableSet headSet(Object toElement, boolean inclusive)
- 지정된 객체보다 작은 값을 갖는 객체들을 반환
inclusive
가 true면toElement
도 범위에 포함NavigableSet tailSet(Object fromElement, boolean inclusive)
- 지정된 객체보다 큰 값을 갖는 객체들을 반환
inclusive
가 true면fromElement
도 범위에 포함NavigableSet subSet(Object fromElement, boolean fromInclusive, Object toElement, boolean toInclusive)
fromElement
와toElement
사이의 값을 갖는 객체들을 반환fromInclusive
가 true면 시작값을,toInclusive
가 true면 끝값을 범위에 포함