Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 TreeSet을 반복(순회)하는 2가지 방법 총정리

TreeSetAbstractSet 클래스의 하위 클래스이며 NavigableSet 인터페이스를 구현한 자료구조입니다. 기본적으로 TreeSet은 요소를 오름차순(ascending order)으로 정렬하여 출력하며, 내부적으로 Comparable 인터페이스를 사용해 집합(set)의 요소들을 정렬합니다.

또한 TreeSet에는 동일한 타입의 요소만 추가해야 합니다. 서로 다른 타입의 요소를 섞어서 추가하면 기본적으로 Comparable 인터페이스에 의존해 정렬하기 때문에 ClassCastException이 발생할 수 있습니다.

TreeSet 선언 구문(Syntax)

public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, Serializable

Java에서 TreeSet의 요소를 순회(iterate)하는 대표적인 방법은 크게 두 가지가 있습니다.

1. Iterator 인터페이스 사용

Iterator 인터페이스를 사용하면 TreeSet의 각 요소를 순차적으로 하나씩 접근할 수 있습니다. hasNext() 메소드로 다음 요소의 존재 여부를 확인하고, next() 메소드로 실제 요소를 가져오는 방식입니다.

예제 코드

import java.util.*;

public class IteratingTreeSetTest {
   public static void main(String[] args) {
      Set<String> treeSetObj = new TreeSet<>();
      treeSetObj.add("Ramesh");
      treeSetObj.add("Adithya");
      treeSetObj.add("Jai");
      treeSetObj.add("Vamsi");
      treeSetObj.add("Chaitanya");

      Iterator<String> it = treeSetObj.iterator(); // Iterator 인터페이스
      while (it.hasNext()) {
         System.out.println(it.next());
      }
   }
}

실행 결과

Adithya
Chaitanya
Jai
Ramesh
Vamsi

출력 결과를 보면 요소를 추가한 순서와 관계없이 사전순(오름차순)으로 정렬되어 출력되는 것을 확인할 수 있습니다.

2. for-each 루프 사용

for-each 루프(향상된 for문)를 사용하면 코드가 훨씬 간결해집니다. 인덱스나 Iterator 객체를 직접 다룰 필요 없이 TreeSet의 모든 요소를 손쉽게 순회할 수 있습니다.

예제 코드

import java.util.*;

public class IteratingTreeSetForEachTest {
   public static void main(String[] args) {
      Set<String> treeSetObj = new TreeSet<>();
      treeSetObj.add("India");
      treeSetObj.add("Australia");
      treeSetObj.add("West Indies");
      treeSetObj.add("South Africa");
      treeSetObj.add("England");

      for(String str : treeSetObj) { // for-each 루프
         System.out.println(str);
      }
   }
}

실행 결과

Australia
England
India
South Africa
West Indies

정리

TreeSet은 자동으로 오름차순 정렬이 되기 때문에 어떤 방식으로 순회하든 항상 정렬된 순서로 요소를 얻을 수 있습니다. 요소를 순회하면서 제거 작업이 필요하다면 Iterator를 사용하고, 단순히 값을 읽기만 한다면 더 간결한 for-each 루프를 사용하는 것이 좋습니다.