首页 > 代码库 > Java的Comparator和Comparable对比
Java的Comparator和Comparable对比
1.对象如何对比排序?
Java的基本类型如int, float, double都可以直接使用java.util.Arrays.sort(Object[])对比排序,那对象是如何比较排序的呢?我们定义的类都是继承Object类的,Object类的equals的方法,默认是比较两个对象是否相等(hashcode相同)
public boolean equals(Object obj) { return (this == obj); }而我们现实要求一般不是这样比较,可以通过实现Comparable或Comparator接口来重新定义对象的排序。
2.Comparable
java.lang.Comparable: int compareTo(Object o1)
这个方法用于当前对象与o1对象做对比,返回int值,分别的意思是:
- positive – 当前对象大于o1
- zero – 当前对象等于o1
- negative – 当前对象小于o1
import java.util.*; class ComparableDemo{ public static void main(String[] args) { Student[] stu={new Student(18,"Mark"),new Student(22,"John"),new Student(20,"Tom"),new Student(19,"Jim")}; Arrays.sort(stu); for(Student s:stu){ System.out.println("the age:"+s.age+",the name:"+s.name); } } } class Student implements Comparable{ public int age; public String name; Student(int age,String name){ this.age=age; this.name=name; } public int compareTo(Object s){ return this.age-((Student)s).age; } }
3.Comparator
java.util.Comparator: int compare(Object o1, Objecto2)
这个方法用于o1与o2对象做对比,返回int值,分别的意思是:
- positive – o1大于o2
- zero – o1等于o2
- negative – o1小于o2
import java.util.*; class ComparatorDemo{ public static void main(String[] args) { Student[] stu={new Student(18,"Mark"),new Student(22,"John"),new Student(20,"Tom"),new Student(19,"Jim")}; /* //也可以直接将比较器以内部类形式定义 Comparator<Student> comp=new Comparator<Student>{ public int compare(Student s1,Student s2){ return s1.age-s2.age; } }; Arrays.sort(stu,comp); */ Arrays.sort(stu,new StuComparator()); for(Student s:stu){ System.out.println("the age:"+s.age+",the name:"+s.name); } } } class Student{ public int age; public String name; Student(int age,String name){ this.age=age; this.name=name; } } class StuComparator implements Comparator<Student>{ public int compare(Student s1,Student s2){ return s1.age-s2.age; } }
4.两种方式区别:
一个类实现了Comparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。
Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:
1、定义类时若没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
2、可以使用多种排序标准,比如升序、降序等(比较灵活)
即:
Comparable对应使用的是:java.util.Collections.sort(List) 或 java.util.Arrays.sort(Object[])
Comparator对应使用的是:java.util.Collections.sort(List, Comparator) 或 java.util.Arrays.sort(Object[], Comparator)
---EOF---
Java的Comparator和Comparable对比