순서가 없고 중복값을 가지지 않는다.
이진 탐색 트리 구조, Binary Search Tree (노드를 2개 가짐)
- 루트와 비교해서 크면 오른쪽, 작으면 왼쪽에 자식 노드 추가
내부데이터가 되어 있는 구조로 저장. = 정렬이 되어 있는 Set
범위 관련 기능을 제공(=List 계열이 할 수 있음)
: Set는 HashSet처럼 방번호가 없기 때문에 정렬을 할 수 없었다. 하지만 TreeSet은 정렬을 시켜 내부데이터를 저장해 정렬 기능을 사용할 수 있다.
둘을 비교 했을 때 보통 HashSet이 더 많이 사용됨! Hash 알고리즘이 속도가 빠르기 때문에!
TreeSet<Integer> set = new TreeSet<Integer>();
set.add(6);
set.add(2);
set.add(5);
set.add(8);
set.add(1);
set.add(9);
set.add(3);
set.add(4);
set.add(10);
set.add(7);
System.out.println(set);
//범위 관련 기능 제공 (=List 계열이 할 수 있음)
System.out.println(set.first()); //1
System.out.println(set.last()); //10
//범위 : 시작위치(포함) ~ 끝위치(미포함)
System.out.println(set.headSet(3)); //3을 찾아서 전까지 가져오기 [1,2]
System.out.println(set.tailSet(7)); //7을 찾아서 뒤에 값 가져오기 [7,8,9,10]
System.out.println(set.subSet(3,7)); //[3,4,5,6]
//HashSet & TreeSet > iterator, 향상된 for문
Iterator<Integer> iter = set.iterator();
while(iter.hasNext()) {
System.out.println(iter.next());
}
for(int n : set) {
System.out.println(n);
}
이진 탐색 트리 > 내부 정렬
키 + 값
: map과 대부분의 기능은 똑같으나 정렬 기능이 추가 된 것!
TreeMap<String, String> map = new TreeMap<>();
map.put("white", "흰색");
map.put("black", "검정색");
map.put("red", "빨강색");
map.put("blue", "파란색");
map.put("yellow", "노랑색");
//Key 자동 정렬
System.out.println(map); //키를 정렬해서 알파벳 순으로 나옴
//map 기능과 똑같음
System.out.println(map.get("white"));
//Tree구조 기능
System.out.println(map.firstKey()); //black
System.out.println(map.lastKey()); //yellow
//요소 자체를 가져옴(key + value)
System.out.println(map.firstEntry()); //black = 검정색
System.out.println(map.lastEntry()); //yellow = 노랑색
System.out.println(map.headMap("m")); //알파벳 m과 비교 결과 : {black=검정색, blue=파란색}
System.out.println(map.tailMap("m")); //{red=빨강색, white=흰색, yellow=노랑색}
System.out.println(map.subMap("r","w"));//{red=빨강색}