public interface Comparable<T>

此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法

实现此接口的对象列表(和数组)可以通过 Collections.sort(和 Arrays.sort)进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器

public interface Comparator<T>

强行对某个对象 collection 进行整体排序 的比较函数。可以将 Comparator 传递给 sort 方法(如 Collections.sortArrays.sort),从而允许在排序顺序上实现精确控制。还可以使用 Comparator 来控制某些数据结构(如有序 set有序映射)的顺序,或者为那些没有自然顺序的对象 collection 提供排序。

区别:简单的说就是 Comparable 的实现使得类可以排序,而 Comparator 的应用场景是需要排序的类本身并没有实现 Comparator 接口,这时候调用 Arrays 的 sort方法则需要传入一个比较器,一般传入一个匿名局部内部类。

 package org.wzh.compare2;

 public interface Animal {

     int getAge();

 }
 package org.wzh.compare2;

 public class Cat implements Animal {

     private String name;
private int age; public Cat() {
} public Cat(String name, int age) {
super();
this.name = name;
this.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 String toString() {
return "Cat [name=" + name + ", age=" + age + "]";
} }
 package org.wzh.compare2;

 public class Dog implements Animal {

     private String name;
private int age; public Dog() {
} public Dog(String name, int age) {
super();
this.name = name;
this.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 String toString() {
return "Dog [name=" + name + ", age=" + age + "]";
} }
package org.wzh.compare2;

import java.util.Arrays;
import java.util.Comparator; public class TestCompare { public static void main(String[] args) {
Dog dog = new Dog("Shrek", 17);
Cat cat = new Cat("Tom", 12);
Animal[] animals = new Animal[]{dog, cat};
System.out.println(Arrays.toString(animals));
Arrays.sort(animals, new Comparator<Animal>() { public int compare(Animal o1, Animal o2) {
// TODO Auto-generated method stub
return o1.getAge() - o2.getAge();
}
});
System.out.println(Arrays.toString(animals));
} }

如果 Dog 和 Cat 类都实现了 Comparable 接口,直接使用

static void sort(Object[] a)
          根据元素的自然顺序对指定对象数组按升序进行排序。

反之,秉着不修改已完成代码的情况下排序则使用

static

<T> void
sort(T[] a, Comparator<? super T> c)
          根据指定比较器产生的顺序对指定对象数组进行排序。

最新文章

  1. 从零学java--传智播客
  2. 【转】缺少servlet-api.jar包
  3. 阻塞与非阻塞IO step by step
  4. 详细的OS X Yosemite 10.10懒人版安装教程
  5. 【M13】以by reference 方式捕捉exceptions
  6. XQuery FLWOR 表达式
  7. php 模拟POST提交的2种方法
  8. React Native &amp; iframe &amp; WebView
  9. .NET的未来-广州.NET俱乐部学生分会
  10. SQL 日期时间比较
  11. Python - 使用pycallgraph生成函数关系图
  12. 第四十一天 socker server和 event
  13. python tuple的函数
  14. grep init 与 grep [i]nit
  15. Springboot学习笔记(二)-定时任务
  16. fengsuo
  17. MySQL把本地数据库上传到linux
  18. Selenium 定位页面元素 以及总结页面常见的元素 以及总结用户常见的操作
  19. python的线上环境配置
  20. 防止网页被别站用 iframe嵌套

热门文章

  1. UVA - 12113 Overlapping Squares(重叠的正方形)
  2. 创建简单web项目
  3. Linux Shell编程case语句
  4. 【机器学习实战学习笔记(1-1)】k-近邻算法原理及python实现
  5. Hadoop家族系统学习路线
  6. 实验吧Web-中-登陆一下好吗??
  7. EXCEL排序(hdu 1862)
  8. 干货|浅谈iOS端短视频SDK技术实现
  9. CountDownLatch、CyclicBarrier、Semaphore的使用
  10. openstack trove redis配置项