반응형

TreeSet

TreeSet은 자바의 Set 인터페이스를 구현한 클래스로, 자동으로 요소들을 정렬된 상태로 유지합니다.

TreeSet 기본 예제

다음은 간단한 TreeSet 예제입니다:

import java.util.TreeSet;

public class ExampleTreeSet {
    public static void main(String[] args) {
        TreeSet<Integer> sortedSet = new TreeSet<>();

        // TreeSet에 요소 추가
        sortedSet.add(5);
        sortedSet.add(3);
        sortedSet.add(9);
        sortedSet.add(1);

        // 정렬된 상태로 요소 출력
        System.out.println("TreeSet 요소: " + sortedSet);

        // 특정 요소가 존재하는지 확인
        if (sortedSet.contains(3)) {
            System.out.println("3은 TreeSet에 있습니다.");
        }

        // 요소 제거
        sortedSet.remove(5);

        // 요소가 제거된 후 TreeSet 출력
        System.out.println("수정된 TreeSet 요소: " + sortedSet);
    }
}

이 코드는 TreeSet에 정수를 추가하고, TreeSet가 자동으로 정렬된 상태를 유지하는 것을 보여줍니다.
또한, TreeSet에서 특정 요소를 찾고, 요소를 제거하는 방법도 보여줍니다.
TreeSet은 중복된 값을 허용하지 않으며, 요소를 자연스러운 순서로 정렬합니다 (정수의 경우 오름차순).

TreeSet 순회 예제

TreeSet은 Set 인터페이스를 구현하므로, Iterator 또는 향상된 for 루프 (enhanced for loop)를 사용하여 모든 요소를 순회할 수 있습니다.

import java.util.TreeSet;
import java.util.Iterator;

public class TraverseTreeSet {
    public static void main(String[] args) {
        TreeSet<Integer> set = new TreeSet<>();

        // TreeSet에 요소 추가
        set.add(5);
        set.add(3);
        set.add(9);
        set.add(1);

        // Iterator를 사용한 순회
        System.out.println("Iterator를 사용한 순회:");
        Iterator<Integer> iterator = set.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }

        // 향상된 for 루프를 사용한 순회
        System.out.println("\n향상된 for 루프를 사용한 순회:");
        for (Integer number : set) {
            System.out.println(number);
        }
    }
}

TreeSet을 이용한 원형 리스트 구현

TreeSet은 원형 리스트(circular list)처럼 직접 구현되지 않습니다. TreeSet은 이진 탐색 트리의 일종인 레드-블랙 트리를 기반으로 하는 정렬된 집합이며, 원형 리스트의 특성인 "끝에서 시작으로 돌아가는" 특징을 자체적으로 지원하지 않습니다.

하지만 TreeSet을 순회하면서 마지막 요소에 도달하면 다시 처음 요소로 돌아가는 방식을 이용하여 원형 리스트를 간접적으로 구현할 수 있습니다.

import java.util.TreeSet;
import java.util.Iterator;

public class CircularTreeSet {
    public static void main(String[] args) {
        TreeSet<Integer> set = new TreeSet<>();
        set.add(1);
        set.add(3);
        set.add(5);
        set.add(7);

        Iterator<Integer> iterator = set.iterator();
        while (true) {
            if (!iterator.hasNext()) { // 마지막에 도달하면
                iterator = set.iterator(); // 반복자를 다시 시작점으로 설정
            }
            Integer number = iterator.next();
            System.out.println(number);

            // 무한 루프를 방지하기 위한 임시 조건 (실제 사용 시 수정 필요)
            if (number == 7) break; // 예시에서는 한 번의 순회로 제한
        }
    }
}
반응형

'Basic > Java' 카테고리의 다른 글

Spring에서 CORS 에러 해결하는 방법  (0) 2023.09.06
@ApiIgnore 어노테이션이란  (0) 2023.06.15
IoC (Inversion of Control)란?  (0) 2023.06.13
EJB(Enterprise JavaBeans)란?  (0) 2023.06.12
[Spring] ClassPathResource와 classpath* 차이  (0) 2023.05.06