이제 앞서서 살펴본 기본 이진트리(binary tree)를 기반으로 한 Set 컬렉션인 TreeSet을 살펴보도록 하겠습니다. TreeSet에서 기본적으로 하나의 노드는, 노드 값인 value 그리고 왼쪽/오른쪽 자식 노드 참조를 위한 두 개의 변수로 구성됩니다.
이 TreeSet에 객체를 저장하게 되면 정렬은 자동으로 진행되는데, 이진트리 개념에서 배운 것처럼 부모 값보다 낮은 것은 왼쪽 자식 노드에, 높은 것은 오른쪽 자식 노드에 저장하게 됩니다. 본격적으로 들어가기 앞서 기억이 잘 나지 않는다면 Set 개념도 다시 한번 복습해 보겠습니다.
기본적인 TreeSet 객체 생성 방식에 대해서 알아보겠습니다. 역시 기본 생성자를 호출하게 되는데, 저장 객체 타입을 파라미터로 표시하게 됩니다.
TreeSet<E> treeSet = new TreeSet<E>();
TreeSet<String> treeSet = new TreeSet<String>();
참고로 그냥 Set타입 변수에 대입해서 사용해도 사용은 가능하지만, TreeSet 클래스 타입으로 대입하는 이유가 있습니다. 바로 객체 검색, 범위 검색과 관련된 메서드를 위해서죠. TreeSet의 메서드를 살펴보겠습니다.
return type | method | description |
E | first( ) | 제일 낮은 객체를 리턴한다. |
E | last( ) | 제일 높은 객체를 리턴한다. |
E | lower(E e) | 주어진 객체보다 바로 아래 객체를 리턴한다. |
E | higher(E e) | 주어진 객체보다 바로 위의 객체를 리턴한다. |
E | floor(E e) | 주어진 객체와 동등한 객체가 있으면 리턴, 없으면 주어진 객체 바로 아래의 객체를 리턴한다. |
E | ceiling(E e) | 주어진 객체와 동등한 객체가 있으면 리턴, 없으면 주어진 객체 바로 위의 객체를 리턴한다. |
E | pollFirst( ) | 제일 낮은 객체를 꺼내오고 컬렉션에서 제거한다. |
E | pollLast( ) | 제일 높은 객체를 꺼내오고 컬렉션에서 제거한다. |
위의 메서드를 설명만 봐서는 잘 이해가 가지 않습니다. 간단한 정수를 다루는 예제를 통해서 사용법을 익혀보겠습니다.
import java.util.TreeSet;
public class ExampleMain {
public static void main(String[] args) {
TreeSet<Integer> scores = new TreeSet<Integer>();
scores.add(new Integer(87));
scores.add(new Integer(98));
scores.add(new Integer(75));
scores.add(new Integer(95));
scores.add(new Integer(80));
Integer score = null;
score = scores.first();
System.out.println("최저점수 : " + score);
score = scores.last();
System.out.println("최고점수 : " + score);
score = scores.lower(new Integer(95));
System.out.println("95점 바로 아래 점수 : " + score);
score = scores.higher(new Integer(95));
System.out.println("95점 바로 위 점수 : " + score);
score = scores.floor(new Integer(95));
System.out.println("95점이거나 바로 아래 점수 : " + score);
score = scores.ceiling(new Integer(85));
System.out.println("85점이거나 바로 위 점수 : " + score);
while(!scores.isEmpty()) {
score = scores.pollFirst();
System.out.println(score + "(남은 객체 수 : " + scores.size() + ")");
}
}
}
/* 출력
최저점수 : 75
최고점수 : 98
95점 바로 아래 점수 : 87
95점 바로 위 점수 : 98
95점이거나 바로 아래 점수 : 95
85점이거나 바로 위 점수 : 87
75(남은 객체 수 : 4)
80(남은 객체 수 : 3)
87(남은 객체 수 : 2)
95(남은 객체 수 : 1)
98(남은 객체 수 : 0)
*/
'Programming > JAVA' 카테고리의 다른 글
멀티 스레드(1) - 멀티 스레드 개념 : 프로세스와 스레드 2 (0) | 2024.10.22 |
---|---|
멀티 스레드(1) - 멀티 스레드 개념 : 프로세스와 스레드 1 (0) | 2024.10.21 |
컬렉션 프레임워크(5) - 검색 강화 컬렉션 1 : 이진트리 구조 (0) | 2024.01.04 |
컬렉션 프레임워크(4) - Map 컬렉션 4 : Properties (0) | 2023.12.23 |
컬렉션 프레임워크(4) - Map 컬렉션 3 : Hashtable (0) | 2023.12.14 |