[자바] SortedSet 사용법
SortedSet
사용법에 대해서 알아보록 하겠습니다.
SortedSet
은 원소들이 정렬되어 있는 Set
입니다.
따라서 SortedSet
하여금 객체 간 대소 비교가 가능한 상황을 만들어줘야 합니다.
여기서 “객체 간 대소 비교가 가능한 상황”이란 다음 2가지로 생각해볼 수 있습니다.
Comparable
인터페이스를 구현하고 있는 클래스의 객체를 원소로 사용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
사용법에 대해서 알아보았습니다.