RATSENO

[JAVA]TreeSet 본문

DEV/JAVA

[JAVA]TreeSet

RATSENO 2020. 2. 5. 14:57

TreeSet은 이진 트리(binary tree)를 기반으로한 Set 컬렉션 입니다.

하나의 노드는 노드값인 value와 왼쪽과 오른쪽 자식노드를 참조하기 위한 두 개의 변수로 구성됩니다.

TreeSet에 객체를 저장하면 자동으로 정렬되는데 부모값과 비교해서 낮은 것은 왼쪽 자식노드, 높은 것은 오른쪽 자식노드에 저장합니다.

TreeSet을 생성하기 위해서는 저장할 객체 타입을 파라미터로 표기하고 기본 생성자를 호출하면 됩니다.

TreeSet<E> treeSet = new TreeSet<E>();

String 객체를 저장하는 TreeSet은 다음과 같이 생성할 수 있습니다.

TreeSet<String> treeSet = new TreeSet<String>();

Set 인터페이스 타입 변수에 대입해도 되지만 TreeSet 클래스 타입으로 대입한 이유는

객체를 찾거나 범위 검색과 관련된 메소드를 사용하기 위해서입니다.

리턴 타입 메소드 설명
E first() 제일 낮은 객체를 리턴
E last() 제일 높은 객체를 리턴
E lower(E e) 주어진 객체보다 바로 아래 객체를 리턴
E higer(E e) 주어진 객체보다 바로 위 객체를 리턴
E floor(E e)

주어진 객체와 동등한 객체가 있으면 리턴, 만약

없다면 주어진 객체의 바로 아래의 객체를 리턴

E ceiling(E e)

주어진 객체와 동등한 객체가 있으면 리턴, 만약

없다면 주어진 객체의 바로 위의 객체를 리턴

E pollFirst() 제일 낮은 객체를 꺼내오고 컬렉션에서 제거함
E pollLast() 제일 높은 객체를 꺼내오고 컬렉션에서 제거함

다음 예제는 점수를 무작위로 저장하고 특정 점수를 찾는 방법을 보여줍니다.

package sample.treeset;

import java.util.TreeSet;

public class TreeSetSample1 {
    public static void main(String[] args) {
        TreeSet<Integer> scores = new TreeSet<>();
        scores.add(new Integer(97));
        scores.add(new Integer(88));
        scores.add(new Integer(57));
        scores.add(new Integer(99));
        scores.add(new Integer(66));

        Integer score = null;

        score = scores.first();
        System.out.println("가장 낮은 점수 : " + score);

        score = scores.last();
        System.out.println("가장 높은 점수 : " + score);

        score = scores.lower(new Integer(80));
        System.out.println("80 아래 점수 : " + score);

        score = scores.higher(new Integer(90));
        System.out.println("90 위의 점수 : " + score);

        score = scores.floor(new Integer(97));
        System.out.println("97점 이거나 바로 아래의 점수 : " + score);

        score = scores.ceiling(new Integer(65));
        System.out.println("67점이거나 바로 위의 점수 : " + score);

        while (!scores.isEmpty()){
            score = scores.pollFirst();
            System.out.println(score + "(남은 객체의 수:"+scores.size()+")");
        }
    }
}
    /*
    가장 낮은 점수 : 57
    가장 높은 점수 : 99
    80 아래 점수 : 66
    90 위의 점수 : 97
    97점 이거나 바로 아래의 점수 : 97
    67점이거나 바로 위의 점수 : 66
    57(남은 객체의 수:4)
    66(남은 객체의 수:3)
    88(남은 객체의 수:2)
    97(남은 객체의 수:1)
    99(남은 객체의 수:0)
    */

'DEV > JAVA' 카테고리의 다른 글

[Lombok]"is"prefix가 붙은 boolean, Boolean  (2) 2021.03.16
CompletableFuture<T> -1  (0) 2021.03.14
[JAVA]Map 컬렉션 - HashMap  (0) 2020.02.05
[JAVA]Map 컬렉션  (0) 2020.02.05
[JAVA]인터페이스  (0) 2019.12.26
Comments