美食网站设计论文,汽车网站开发流程,专业网页设计师培训机构,柳州制作网站Comparable和Comparator接口都是实现集合中元素的比较、排序的#xff0c;众所周知#xff0c;诸如Integer#xff0c;double等基本数据类型#xff0c;java可以对他们进行比较#xff0c;而对于类的比较#xff0c;需要人工定义比较用到的字段比较逻辑。总体来讲#x…Comparable和Comparator接口都是实现集合中元素的比较、排序的众所周知诸如Integerdouble等基本数据类型java可以对他们进行比较而对于类的比较需要人工定义比较用到的字段比较逻辑。总体来讲可以把Comparable理解为内部比较器而Comparator是外部比较器。Comparable需要修改源码Comparator则不需要
1、Comparable内部比较器
实现了Comparable接口的类中需要重写 int compareToT o方法。实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序。
public class Person implements ComparablePerson {String name;int age;public Person(String name, int age) {super();this.name name;this.age age;}public Person() {super();}Overridepublic int compareTo(Person o) {return this.age - o.age; //从小到大排序}
}
编写测试类来对person对象进行排序 import java.util.Arrays;public class Test {public static void main(String[] args) {Person p1 new Person(zhangsan, 20);Person p2 new Person(lisi, 18);Person p3 new Person(wangwu, 25);Person[] persons {p1, p2, p3};System.out.println(排序前);for (Person person : persons) {System.out.println(person.name : person.age);}//Arrays是数组工具类Collections是集合工具类Arrays.sort(persons);System.out.println(排序后);for (Person person : persons) {System.out.println(person.name : person.age);}}}2、Comparator外部比较器
不改变源码从新创建一个类该类实现了Comparator的接口重写 int compare(T o1, T o2)方法 是“比较o1和o2的大小”。
创建Person类
public class Person {String name;int age;public Person(String name, int age) {super();this.name name;this.age age;}public Person() {super();}
}来创建person类的比较器PersonComparator类
import java.util.Comparator;public class PersonComparator implements ComparatorPerson{Overridepublic int compare(Person o1, Person o2) {return o1.age - o2.age;}}编写测试类
import java.util.Arrays;public class Test {public static void main(String[] args) {Person p1 new Person(zhangsan, 20);Person p2 new Person(lisi, 18);Person p3 new Person(wangwu, 25);Person[] persons {p1, p2, p3};System.out.println(排序前);for (Person person : persons) {System.out.println(person.name : person.age);}Arrays.sort(persons, new PersonComparator());System.out.println(排序后);for (Person person : persons) {System.out.println(person.name : person.age);}}
}3、总结 二者各有优缺点用Comparable 简单 只要实现Comparable 接口的对象直接就成为一个可以比较的对象但是需要修改源代码。 用Comparator 的好处是不需要修改源代码 而是另外实现一个比较器 当某个自定义的对象需要作比较的时候把比较器和对象一起传递过去就可以比大小了 并且在Comparator 里面用户可以自己实现复杂的可以通用的逻辑使其可以匹配一些比较简单的对象那样就可以节省重复劳动。