- TreeSet 특징
- TreeSet은 이진탐색트리이다.
- 검색, 정렬에 유리하나 추가, 삭제에는 취약하다.
- Set이라서 중복을 허용하지 않는다.
- 기본적으론 nature ordering을 지원하지만 Comparator 객체를 매개변수로 사용하면 임의의 정렬방법을 지정할 수 있다.
- 노드는 2개의 자식노드를 가지고 있고 본인보다 작은 값을 가진 자식노드는 왼쪽, 큰 값을 가진 자식노드는 오른쪽에 추가된다.(그림 참조)
- Comparator를 응용한 TreeSet 정렬
TreeSet<String> treeSet = new TreeSet<String>(new Comparator<String>{
public int compare(String o1, String o2){
if(o1.length() <= o2.length()){
return -1;
}else{
return 1;
}
}
});
//TreeSet 생성자의 매개변수로 Comparator 객체를 사용한다.
//Comparator 객체 생성 시, compare 메소드를 오버라이드하여 원하는 정렬순서를 만들 수 있다.
//리턴값이 음수라면 o1이 왼쪽자식노드로 o2가 오른쪽자식노드로 TreeSet이 구성된다.
//리턴값이 양수라면 o2가 왼쪽자식노드로 o1이 오른쪽자식노드로 TreeSet이 구성된다.
//위의 compare은 길이가 짧은 문자부터 정렬되도록 만드는 메소드이다.
String str1 = "1234";
String str2 = "12";
String str3 = "1234567";
String str4 = "12345";
treeSet.add(str1);
treeSet.add(str2);
treeSet.add(str3);
treeSet.add(str4);
Iterator<String> iter = treeSet.iterator();
System.out.println("<출력>");
while(iter.hasNext()) {
System.out.println(iter.next());
}
<출력>
12
1234
12345
1234567
'미역 > 자바' 카테고리의 다른 글
Comparable 과 Comparator (0) | 2021.11.02 |
---|---|
그래프에서 DFS로 사이클 찾기 (0) | 2021.10.28 |
XOR의 성질 (0) | 2021.10.22 |
최대공약수 & 최소공배수 (0) | 2021.10.22 |
코딩테스트, 예시 파일 읽어오기 (0) | 2021.10.08 |