Comparable与Comparator接口

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

//实现Comparable接口;
public class Person implements Comparable<Person> {

	private String name;
	private int age;
	@Override
	public int compareTo(Person o) {
		int i = this.age - o.getAge();
		return i;
	}
	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;
	}
	
	//沒有实现Comparable接口
	static class Person1{
		private String name;
		private int 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;
		}
	}
	
	//实现Comparable,重寫比較方法
  private void sort1(){
	  Collections.sort(new ArrayList<Person>()); 
  }
  
  
  //需要比較的類已無法更改(没有实现Comparable),排序时創建比較器
  private void sort2(){
	  Collections.sort(new ArrayList<Person1>(), new Comparator<Person1>() { 
			@Override
			public int compare(Person1 o1, Person1 o2) {
				int  j = o1.getAge() -o2.getAge();
				return j;
			}
		});
    }
  

引用一段解释:

public interface Comparator<T> {
    int compare(T o1, T o2);
    boolean equals(Object obj);
}

       Comparator接口中定义了两个方法,为什么实现类创建对象的时候只需重写一个compare()方法? 

  实际上,我们知道当一个类没有显式继承父类的时候,会有一个默认的父类,即java.lang.Object,在Object类中有一个方法即为equals方法,所以这里并不强制要求实现Comparator接口的类要实现equals方法,直接调用父类的即可;

      ----------------------------------------------------------------------------------------------------------------------

      总之来说,Comparable 是排序接口;若一个类实现了 Comparable 接口,就意味着 “该类支持排序”。而 Comparator 是比较器;我们若需要控制某个类的次序,可以建立一个 “该类的比较器” 来进行排序。 
  前者应该比较固定,和一个具体类相绑定,而后者比较灵活,它可以被用于各个需要比较功能的类使用。可以说前者属于 “静态绑定”,而后者可以 “动态绑定”。 
    我们不难发现:Comparable 相当于 “内部比较器”,而 Comparator 相当于 “外部比较器”。



阅读更多
换一批

没有更多推荐了,返回首页