TreeSet은 AbstractSet 클래스의 하위 클래스로, 중복된 요소를 허용하지 않습니다. 기본적으로 TreeSet은 요소를 오름차순으로 저장하며, 집합 내 요소를 검색하는 속도가 매우 빠릅니다. TreeSet 클래스는 내부적으로 TreeMap을 사용하여 요소를 저장하고, 집합의 요소들은 자연 순서(natural ordering)에 따라 정렬됩니다.
TreeSet에 저장된 요소들을 파일로 저장하는 것도 가능합니다. Arrays.asList() 메서드를 활용해 집합을 생성한 뒤, 이를 ObjectOutputStream 클래스의 writeObject() 메서드에 인수로 전달하면 됩니다.
문법
public class TreeSet extends AbstractSet<E> implements NavigableSet<E>, Cloneable, Serializable
예제
import java.util.*;
import java.io.*;
public class TreeSetTest {
public static void main(String args[]) {
try {
String elements[] = {"Raja", "Jai", "Adithya", "Chaitanya"};
Set<String> set = new TreeSet<String>(Arrays.asList(elements));
FileOutputStream fos = new FileOutputStream("set.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(set);
oos.close();
System.out.println("집합의 요소가 파일에 성공적으로 저장되었습니다");
} catch(Exception e) {
System.out.println("오류 발생 : " + e.getMessage());
}
}
}코드 설명
위 예제는 다음과 같은 단계로 동작합니다.
1단계: 문자열 배열을 Arrays.asList() 메서드로 변환하여 TreeSet을 생성합니다. 이때 요소들은 자동으로 오름차순(Adithya, Chaitanya, Jai, Raja)으로 정렬됩니다.
2단계: FileOutputStream을 통해 "set.txt"라는 파일 출력 스트림을 생성합니다.
3단계: ObjectOutputStream 객체를 만들고 writeObject() 메서드를 호출하여 집합 전체를 직렬화해 파일에 기록합니다.
4단계: 스트림을 닫고 성공 메시지를 출력합니다. 예외가 발생하면 catch 블록에서 오류 메시지를 출력합니다.
실행 결과
집합의 요소가 파일에 성공적으로 저장되었습니다
정리
TreeSet을 파일로 저장하려면 직렬화(Serialization)를 지원하는 ObjectOutputStream을 사용하는 것이 핵심입니다. TreeSet 클래스는 Serializable 인터페이스를 구현하고 있으므로 별도의 추가 작업 없이 그대로 파일에 저장할 수 있습니다. 반대로 저장된 파일에서 데이터를 읽어올 때는 ObjectInputStream의 readObject() 메서드를 사용하면 됩니다.