Logo

[자바] SortedSet 사용법

SortedSet 사용법에 대해서 알아보록 하겠습니다.

SortedSet은 원소들이 정렬되어 있는 Set입니다. 따라서 SortedSet 하여금 객체 간 대소 비교가 가능한 상황을 만들어줘야 합니다. 여기서 “객체 간 대소 비교가 가능한 상황”이란 다음 2가지로 생각해볼 수 있습니다.

  1. Comparable 인터페이스를 구현하고 있는 클래스의 객체를 원소로 사용
  2. Comparator 인터페이스를 구현한 대소 판단을 위한 로직을 SortedSet 객체 생성 시에 넘김

본 포스팅에서는 Comparable 인터페이스를 구현하고 있는 String 클래스의 객체를 원소로 이용하여 간단한 예제를 작성해보겠습니다. 자바에서 SortedSet 인터페이스의 기본 구현체로 TreeSet 클래스를 제공해주고 있습니다.

List<String> animals = Arrays.asList("Dog", "Cat", "Tiger", "Lion", "Elephant");
SortedSet<String> animalSet = new TreeSet<>(animals);

위와 같이 5개의 동물 문자열로 TreeSet 객체를 생성하면, TreeSet은 원소들을 정렬된 상태로, 즉, Cat, Dog, Elephant, Lion, Tiger 순으로 보관하게 됩니다.

범위 접근: headSet, tailSet, subSet

특정 범위 내의 원소를 접근하기 위한 방법을 알아봅시다. 먼저, 가장 작은 원소부터 특정 값까지는 범위 접근은 headSet 메소드를 사용합니다.

Set<String> headSet = animalSet.headSet("Elephant");
System.out.println("#headSet: " + headSet);
// #headSet: [Cat, Dog]

인자로 넘기는 값과 동일한 원소는 빼고 반환하니 주의바랍니다. (exclusive)

다음으로, 특정 원소부터 가장 큰 원소까지의 범위 접근은 tailSet 메소드를 사용합니다.

Set<String> tailSet = animalSet.tailSet("Elephant");
System.out.println("#tailSet: " + tailSet);
// #tailSet: [Elephant, Lion, Tiger]

인자로 넘기는 값을 동일한 원소도 포함해서 반환하니 주의바랍니다. (inclusive)

마지막으로, 값A보다 크거나 같고, 값B보다 작은 원소의 범위 접근은 subSet 메소드를 사용합니다.

Set<String> subSet = animalSet.subSet("Dog", "Lion");
System.out.println("#subSet: " + subSet);
// #subSet: [Dog, Elephant]

첫번째 인자는 inclusive, 두번째 인자는 exclusive 입니다.

가장자리 접근: first, last

첫번째 인자, 즉 가장 작은 인자는 first 메소드로, 마지막 인자, 즉 가장 큰 인자는 last 메소드로 얻을 수 있습니다.

String first = animalSet.first();
System.out.println("#first: " + first);
// #first: Cat

String last = animalSet.last();
System.out.println("#last: " + last);
// #last: Tiger

지금까지 SortedSet 사용법에 대해서 알아보았습니다.

참고