Comparable 및 Comparator의 차이점 및 사용

1. Comparable 및 Comparator의 공통점:
Comparable &Comparator는 모두 대상의 비교, 정렬을 실현하는 데 쓰인다
2. Comparable과 Comparator의 차이점:
주요 차이점:Comparable는 구체적으로 비교할 대상에 정의된(대상은Comparable 인터페이스를 실현하고compareTo()))이며,Comparator는 비교기로서 대상을 비교하는 도구류를 사용자 정의한다.
3. Comparable 사용:
java를 실현합니다.lang.Comparable 인터페이스는 당신의 종류를 타고난 비교 능력을 가지게 합니다.java의 8가지 기본 유형은Comparable 인터페이스를 실현했습니다.
public class User implements Comparable<User>{
	private int age;
	private int userNo;
	
	public int getUserNo() {
		return userNo;
	}

	public void setUserNo(int userNo) {
		this.userNo = userNo;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	/**
	 *  age 
	 */
	public int compareTo(User user) {
		return age>user.age ? 1 : (age==user.age ? 0 : -1);
	}
	
	public static void main(String args[]){
		User user1 = new User();
		user1.setAge(1);
		User user2 = new User(); 
		user2.setAge(2);
		System.out.println(user1.compareTo(user2));// 
		
		User[] users = new User[]{user1,user2};
		Arrays.sort(users);// , Collection Collections.sort(..)
		for(int i=0;i<users.length;i++){
			System.out.println(users[i].getAge());
		}
	}
}

4. Comparator 사용:
만약에 누군가가 당신에게 Comparable를 실현하지 못한 클래스를 주거나 당신에게 준 클래스가 Comparable를 실현시켰다면 당신이 그것을 실현하는 방식을 좋아한다면 다른 비교 방법이 필요합니다.Comparator는 정책 모드(strategy 디자인 pattern)로 대상 자체를 바꾸지 않고 하나의 정책 대상(strategy object)으로 행동을 바꾸는 것이다.이 인터페이스에는 compare () 와 equels () 두 가지 방법이 있지만, 반드시 equels () 를 실현해야 하는 것은 아닙니다. 특별한 요구가 없으면 모든 종류가 Object를 계승하기 때문입니다. Object는 equals () 방법이 있습니다.
public class ComparatorTest{
	
	static Comparator<User> comparator = new Comparator<User>(){
		@Override
		/**
		 *  
		 */
		public int compare(User user1, User user2) {
			return user1.getUserNo()-user2.getUserNo();
		}
	};
	
	
	public static void main(String args[]){
		User user1 = new User();
		user1.setAge(1);
		user1.setUserNo(2);
		User user2 = new User(); 
		user2.setAge(2);
		user2.setUserNo(1);
		
		User[] users = new User[]{user1,user2};
		Arrays.sort(users,comparator);// , Collection Collections.sort(..)
		for(int i=0;i<users.length;i++){
			System.out.println(users[i].getAge());
		}
	}
}

주의: 그룹과 집합에 대한 정렬 시 오름차순 또는 내림차순은compareTo()와compare() 두 가지 방법에서 되돌아올 때 -1인지 1인지에 따라 결정됩니다

좋은 웹페이지 즐겨찾기