IT/Programming / / 2023. 4. 20. 13:28

[JAVA] Comparable, CompareTo 사용 예제

반응형
package dayday15;
/*
 * <객체의 정렬>
 * 
 * 
 */


import java.util.*;

//객체 정렬 기준 설정 방법
/*
 * 1. implements Comparable
 * 2. Comparable의 compareTo()메소드를 Override함 (generic) 
 */
class Person2 implements Comparable<Person2>{ //객체 정렬을 위해
	private String name;
	private int age;

	public Person2() {
	}
	public Person2(String name, int age) {
		this.name = name;
		this.age = age;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public int compareTo(Person2 o) {
		// TODO Auto-generated method stub
		//나이순 정렬!
		if(this.age > o.age){
			return -1; //앞으로
		}else if(this.age < o.age){
			return 1; //뒤로
		} else {//나이가 같으면 이름순
			return this.name.compareTo(o.name);
		}
	}
	//-1, 1??
	//sort할때 최소값을 찾아 순서 정렬하기 때문에  들어올 객체와 현재 객체와 비교함.
	//음수값 -> 앞으로, 양수 -> 뒤로, 0은 그대로 , 숫자 크기는 상관없다. 음수와 양수가 중요.
	
	/*
	 *  public int compareTo(String anotherString) {
        int len1 = value.length;
        int len2 = anotherString.value.length;
        int lim = Math.min(len1, len2);
        char v1[] = value;
        char v2[] = anotherString.value;

        int k = 0;
        while (k < lim) {
            char c1 = v1[k];
            char c2 = v2[k];
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        return len1 - len2;
    }
	 * 
	 */
}

public class test04 {
	public static void main(String[] args) {
		TreeSet<Person2> ts = new TreeSet<Person2>();
		ts.add(new Person2("둘리",5));
		ts.add(new Person2("또치",10));
		ts.add(new Person2("고길동", 30));
		ts.add(new Person2("홍길동", 40));
		ts.add(new Person2("단비", 3));
		ts.add(new Person2("단비", 5));
		
		//Person class로 할때
		//System.out.println(ts);
		/*
		 * java.lang.ClassCastException:
		 * dayday15.Person cannot be cast to java.lang.Comparable
		 * 무슨 기준으로 정렬해야 할 지 모르겠다.
		 */
		System.out.println(ts);
		/*
		 * [
		 *   Person [name=홍길동, age=40]
		 * , Person [name=고길동, age=30]
		 * , Person [name=또치, age=10]
		 * , Person [name=단비, age=5]
		 * , Person [name=둘리, age=5]
		 * , Person [name=단비, age=3]
		 * ]
		 */

		
		
	}
}
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유