글
TreeSet 클래스는 내부적으로 트리 형태로, 데이터를 관리하는 Collection 으로, Set 의 특징을 지닙니다. Set 의 특징은, 중복을 제거한다는 점입니다. 또, 트리 구조를 지니기 때문에, 정렬이 된다는 특징도 가집니다.
TreeSet 클래스의 대표적인 메소드, subSet 이 있는데, 이는, 시작 값과 끝 값을 매개변수로 받아, 그것을 범위로, 부분 Set 을 추출합니다.
TreeSet 클래스에서 subSet 메소드는, 2 개의 메소드가 오버로딩되어 있습니다.
SortedSet<E> subSet(E fromElement, E toElement)
시작 ~ 끝 이전까지의 부분집합 반환
NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive)
시작 (포함여부 선택 가능) ~ 끝 (포함여부 선택 가능) 까지의 부분 집합 반환
이 중에서, 첫 번재 subSet 메소드는, 시작 값은 포함하고, 끝 값은 포함하지 않음을 뜻하고, 두 번째 subSet 메소드는 시작 값과 끝 값의 포함 여부를 직접 지정할 수 있습니다.
주의해야 할 점은, subSet 메소드의 내부에서, 원본 set 의 데이터들을 복사해서 새로 부분 집합을 구성하는 것이 아니라, 원본 데이터들을 그대로 두고, 원본 set 과 Sub Set 이 같이 바라보고 있는 상태에서, subSet 은 해당 범위만 바라볼 수 있는 형태로 되어 있다는 것입니다. 이에 따라, subSet 메소드 후에, 원본 Set 이나 sub Set 에 변경이 일어나면 (추가, 삭제 등) 원본 Set, Sub Set 모두 변경이 동시에 일어난다고 보면 됩니다. (단, Sub Set 은 해당 범위만 보여짐)
TreeSet 에 객체를 추가하려면, 그 객체의 클래스는 무조건 비교 가능해야 한다는 제약 조건이 따르게 됩니다. 즉, 그 객체가 TreeSet 에 존재하는지 체크할 수 있는, compareTo 메소드가 있어야 한다는 것입니다. TreeSet 에 객체를 추가할 때, 내부적으로, 설정된 compareTo 메소드를 호출하여, 반환값이 0 이 나오면, 같은 객체가 이미 존재한다고 간주하여, 현재 객체를 다시 추가하지 않게 됩니다.
(TreeSet 클래스 참고)
https://docs.oracle.com/javase/8/docs/api/java/util/TreeSet.html
'4.1) OCJP > 관련 이론 및 문법' 카테고리의 다른 글
관련 이론 및 문법 - 열거형 (enumeration) (0) | 2015.06.25 |
---|---|
관련 이론 및 문법 - Object 클래스 (0) | 2015.06.23 |
관련 이론 및 문법 - static (0) | 2015.06.23 |
관련 이론 및 문법 - Cloneable 인터페이스 (0) | 2015.06.22 |
관련 이론 및 문법 - Runnable 인터페이스 (0) | 2015.06.22 |
관련 이론 및 문법 - 배열 (array) (0) | 2015.06.21 |
관련 이론 및 문법 - main 메소드의 매개변수 (0) | 2015.06.19 |
관련 이론 및 문법 - 변수의 기본 초기화 값 (0) | 2015.06.19 |
관련 이론 및 문법 - assertion (0) | 2015.06.19 |
관련 이론 및 문법 - try ~ catch ~ finally (0) | 2015.06.19 |
RECENT COMMENT