본문 바로가기

Java/본격 Java 컬렉션

[Java] Comparable 개념 및 실습

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