Java/Java

Java 컬렉션 프레임워크_ Set(TreeSet)

검은고양이개발자 2023. 1. 14. 18:11
반응형

Set에서 HashSet과 다르게 사용되는 클래스 TreeSet은 어떤 특징을 가지고 있을까요?


 

TreeSet은 HashSet과 다르게 객체가 들어오게 되면 그 객체들을 자동적으로 오름차순으로 정렬을 합니다.

따라서 List처럼 따로 인덱스를 지정하지 않음에도 특정한 부분의 값들을 따로 가져올 수도 있고

가장 좌측의 값, 가장 큰 값, 어떠한 객체의 오른쪽에 있는 값등을 가져올 수 있습니다.

 

public class CordJgTreeSet {
    public static void main(String[] args) {
        TreeSet<Integer> treeSet = new TreeSet<>();
        treeSet.add(1);
        treeSet.add(10);
        treeSet.add(5);
        treeSet.add(17);
        treeSet.add(-1);

        System.out.println(treeSet);
        System.out.println(treeSet.first());
        System.out.println(treeSet.last());
        System.out.println(treeSet.higher(5));
        System.out.println(treeSet.subSet(0,10));
        System.out.println(treeSet.subSet(0,18));
        System.out.println(treeSet.subSet(-1,10));
    }
}
[-1, 1, 5, 10, 17]
-1
17
10
[1, 5]
[1, 5, 10, 17]
[-1, 1, 5]

위의 코드를 보면 treeSet에 무분별하게 값을 추가했음에도 treeSet을 출력해 보면 

[-1,1,5,10,17]이라는 정렬되어 있는 값을 얻을 수 있습니다.

 

그리고 treeSet의 메서들 중 subSet이라는 메서드가 있는데

subSet(a, b)가 의미하는 바는 treeSet에 존재하는 객체들 중 a <=x <b에 있는 객체들을 나타내라는 뜻입니다.

subSet 메서드는 treeSet의 객체들을 따로 빼는 역할이 아닌 그저 그 구간 사이에 있는 객체들만 보는 역할을 합니다

subSet(0,10)을 하니 [1,5]만 나온 것을 볼 수 있습니다!

 

숫자뿐만 아니라 String타입으로 string 객체들이 들어간다 해도 사전 편찬 순으로 오름차순 되어 정렬됩니다.

한번 스스로 String 타입으로 만들어 확인해 보세요

반응형