对象比较器

来源:互联网 发布:在淘宝怎么买充值卡 编辑:程序博客网 时间:2024/06/05 05:44

1.比较器的作用

对两个或多个数据想进行比较,以确定它们是否相等,或确定它们之间的大小关系及排列顺序称为比较。

前面我们学习过Arrays.sort方法可实现对象的排序操作:

public static void sort(Object[] a)


2.Comparable接口

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

public interface Comparable<T>{

int compareTo(T o);//o是要比较的对象

//比较次对象与指定对象的顺序

}

分别返回-1、0或1中的一个值

根据次对象时小于、等于还是大于指定对象。


3.Comparator接口

Comparable接口是要求自己一定类去实现,按照OO原则:对修改关闭,对扩展开放。

那么如果这个类已经定义好了,不想在去修改它,那如何实现比较呢?

Arrays.sort有一个这样的重载方法:

public static<T>void sort(T[] a,Comparator<?super T>c)

Comparator接口:强行对某个对象collection进行整体排序的比较。

int compare(T o1,T o2) //比较用来排序的两个参数。

根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。


package com.vince.sort;/** * 人类 * 如果自定义类的对象要实现排序(比较),那么就要实现Comparable接口,并实现接口的 * compareTo方法 * @author lamp * */public class Person implements Comparable<Person>{private String name;private int age;public Person() {}public Person(String name, int age) {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;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + "]";}//比较器的比较方法//如果当前对象小于参数对象,返回-1//如果当前对象等于参数对象,返回0//如果当前对象大于参数对象,返回1@Overridepublic int compareTo(Person o) {//实现:定义对象之间的比较规则if(o==null){throw new NullPointerException();}if(this.age<o.age){return -1;}else if(this.age>o.age){return 1;}return 0;}}

package com.vince.sort;import java.util.Arrays;//对象的排序public class PersonSortDemo {public static void main(String[] args) {String[] names = {"利亚","泉彩","岛爱","藤兰","结衣","井空"};Person[] persons = { new Person("利亚", 27), new Person("泉彩", 29),new Person("岛爱", 41), new Person("藤兰", 33),new Person("结衣", 25), new Person("井空", 30) };Person2[] persons2 = { new Person2("利亚", 27), new Person2("泉彩", 29),new Person2("岛爱", 41), new Person2("藤兰", 33),new Person2("结衣", 25), new Person2("井空", 30) };Arrays.sort(names);System.out.println(Arrays.toString(names));//自定义类对象数组排序Arrays.sort(persons);System.out.println(Arrays.toString(persons));//使用自定义的比较器Arrays.sort(persons2, new Person2Comparator());System.out.println(Arrays.toString(persons2));}}


package com.vince.sort;/** * 人类 * @author lamp * */public class Person2{private String name;private int age;public Person2() {}public Person2(String name, int age) {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;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + "]";}}

package com.vince.sort;import java.util.Comparator;/** * 自定义的类比较器 * @author lamp * */public class Person2Comparator implements Comparator<Person2>{@Overridepublic int compare(Person2 o1, Person2 o2) {if(o1==null || o2==null){throw new NullPointerException();}if(o1.getAge()<o2.getAge()){return -1;}else if(o1.getAge()>o2.getAge()){return 1;}return 0;}}


0 0
原创粉丝点击