Java Comparable(lang) Comparator(util)对比

来源:互联网 发布:依云软件破解 编辑:程序博客网 时间:2024/06/04 23:36
java.lang.Comparable是一个对象本身就已经支持自比较所需要实现的接口(如String  Integer自己就可以完成比较大小操作)即对象必须实现这个接口Comparable比较用的方法是Arrays.sort(对象数组)。Comparable而是需要对象实现Comparable<对象>
   
java.util.Comparator是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。Comparator比较用的方法是Collections.sort(list, new Comparator());Comparator需要自己写一个比较类。

compareTo和compare方法返回1则表示需要交换 -1则不需要交换

package test.Compare;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.Comparator;import java.util.List;public class CompareTest {public static void main(String[] args) {List<PersonA> list = new ArrayList<PersonA>();PersonA p1 = new PersonA(23);list.add(p1);PersonA p2 = new PersonA(21);list.add(p2);PersonA p3 = new PersonA(29);list.add(p3);Object pArr[] = list.toArray();Arrays.sort(pArr);for (Object v : pArr) {System.out.println(v);}List<PersonB> list1 = new ArrayList<PersonB>();PersonB p4 = new PersonB(23);list1.add(p4);PersonB p5 = new PersonB(21);list1.add(p5);PersonB p6 = new PersonB(29);list1.add(p6);//从小到大顺序        Collections.sort(list1, new SortPersonBAge());        for (PersonB v : list1) {System.out.println(v);}        //从大到小        Collections.reverse(list1);        for (PersonB v : list1) {System.out.println(v);}}};// Comparable是java.lang包里面的Arrays.sort(pArr);class PersonA implements Comparable<PersonA> {private int age;public PersonA(int age) {super();this.age = age;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic int compareTo(PersonA o) {if (this.age > o.getAge())return 1;else if (this.age < o.getAge())return -1;return 0;}@Overridepublic String toString() {return this.age + " ";}}class PersonB {private int age;public PersonB(int age) {super();this.age = age;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return this.age + " ";}}//Comparable Comparator是java.util包体里面的class SortPersonBAge implements Comparator<PersonB> {@Overridepublic int compare(PersonB o1, PersonB o2) {if (o1.getAge()>o2.getAge()) {return 1;} else if (o1.getAge()<o2.getAge()) {return -1;}return 0;}};
0 0