TreeSet에서는 내부적 로직에 맞춰서 순서가 정해진다.
하지만 객체 단위는 어떻게 순서를 정해야할지 자바에서도 정해지지 않았다.
TreeSet을 비롯해 순서가 자동 정리 되는 것들에는 우리가 정렬하는 기준을 정해줘야한다.
그 중에 하나는 Comparable이다.
.
.
그러면 우선 객체를 생성할 클래스를 만든다.
.
.
package Set;
public class Person implements Comparable<Person>{
public String name;
public int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
// 어떤 기준으로 두 객체를 비교할지를 구현
@Override
public int compareTo(Person o) {
if(age < o.age) return -1;
else if (age == o.age) return 0;
else return 1;
}
}
.
.
클래스 내부에 순서를 정해줄 메소드를 오버라이딩 한다.
그건 바로 compareTo라는 메소드이다.
오름차순으로 정리할 때 선언된 객체와 비교를 원하는 객체를 비교해서 그 객체의 어떤 특징을 지정한다.
그 특징이 선언된객체 < 비교를 원하는 객체 : -1
선언된객체 = 비교를 원하는 객체 : 0
선언된객체 > 비교를 원하는 객체 : 1
로 리턴하면 오름차순으로 정렬된다.
.
.
그럼 비교를 해보기위해 테스트를 해본다.
.
.
package Set;
import java.util.*;
public class ComparableEx1 {
public static void main(String[] args) {
TreeSet<Person> tSet = new TreeSet<Person>();
tSet.add(new Person("Hong Gildong", 33));
tSet.add(new Person("Kim Java", 25));
tSet.add(new Person("Hong Gildong", 33));
for(Person p : tSet) {
System.out.println(p);
}
}
}
.
.
.
.
집합의 성질때문에 중복값은 입력이 안되었다.
내부적으로 순서를 결정하는 메소드를 나이로 설정했기 때문에 나이 오름차순으로 정리된다.
728x90
반응형
'Java > 본격 Java 컬렉션' 카테고리의 다른 글
[Java] HashMap 개념 및 실습 (0) | 2020.07.14 |
---|---|
[Java] Comparator 개념 및 실습 (0) | 2020.07.14 |
[Java] TreeSet 개념 (0) | 2020.07.13 |
[Java] HashSet 개념 (0) | 2020.07.13 |
[Java] Stack 개념 (0) | 2020.07.13 |