Java记录 -61- 比较器Comparator
2017-07-01 16:00
218 查看
public interface Comparator<T>
强行对某个对象 collection 进行整体排序的比较函数。可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的对象 collection 提供排序。
自然排序如:整数的1,2,3,4,5;字母的a,b,c,d
针对原始类型或String字符串类型,都默认使用自然排序,可以直接使用集合类进行排序。
但如果我们自定义的对象,其添加到需要排序的集合类中时,集合类不知道其排序规则,需要告诉集合类该新对象的排序规则。
我们需要实现自己的排序类,即实现Comparator。
实现Comparator需要实现其compare方法:
int compare(Object o1, Object o2) 该方法返回一个基本类型的整型,返回负数表示o1 小于o2,返回0 表示o1和o2相等,返回正数表示o1大于o2。public class TreeSetTest { public static void main(String[] args){ TreeSet tree = new TreeSet(new MyComparator()); tree.add(new Person(24)); tree.add(new Person(33)); tree.add(new Person(21)); tree.add(new Person(20)); System.out.println(tree); //[20, 21, 24, 33] }}class Person{ int age; String name; public Person(int age){ this.age = age; } public String toString(){ return String.valueOf(this.age); }}class MyComparator implements Comparator{ public int compare(Object o1, Object o2) { Person p1 = (Person)o1; Person p2 = (Person)o2; return p1.age - p2.age; }}TreeSet的存储是有序的,我们自定义的Person对象其排序规则需要我们自定义MyComparator,并告诉TreeSet构造函数,这样TreeSet就可以存储我们自定义的Person对象,并按照我们定义的排序规则将存储的对象进行排序。(按照Person的age属性大小进行排序)。
强行对某个对象 collection 进行整体排序的比较函数。可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的对象 collection 提供排序。
自然排序如:整数的1,2,3,4,5;字母的a,b,c,d
针对原始类型或String字符串类型,都默认使用自然排序,可以直接使用集合类进行排序。
但如果我们自定义的对象,其添加到需要排序的集合类中时,集合类不知道其排序规则,需要告诉集合类该新对象的排序规则。
我们需要实现自己的排序类,即实现Comparator。
实现Comparator需要实现其compare方法:
int compare(Object o1, Object o2) 该方法返回一个基本类型的整型,返回负数表示o1 小于o2,返回0 表示o1和o2相等,返回正数表示o1大于o2。public class TreeSetTest { public static void main(String[] args){ TreeSet tree = new TreeSet(new MyComparator()); tree.add(new Person(24)); tree.add(new Person(33)); tree.add(new Person(21)); tree.add(new Person(20)); System.out.println(tree); //[20, 21, 24, 33] }}class Person{ int age; String name; public Person(int age){ this.age = age; } public String toString(){ return String.valueOf(this.age); }}class MyComparator implements Comparator{ public int compare(Object o1, Object o2) { Person p1 = (Person)o1; Person p2 = (Person)o2; return p1.age - p2.age; }}TreeSet的存储是有序的,我们自定义的Person对象其排序规则需要我们自定义MyComparator,并告诉TreeSet构造函数,这样TreeSet就可以存储我们自定义的Person对象,并按照我们定义的排序规则将存储的对象进行排序。(按照Person的age属性大小进行排序)。
相关文章推荐
- Java记录 -61- 比较器Comparator
- 关于Java中使用Comparator比较器的记录
- java常用类库续3(比较器Comparable、Comparator、观察者设计模式、正则表达式、定时调度)
- JAVA对象比较器Comparator
- Java基础之一组有用的类——使用比较器对数组排序(TrySortingWithComparator)
- JAVA对象比较器Comparator
- Java自定义比较器Comparator
- 站稳马步——(3)java比较器——Comparable和Comparator
- JAVA对象比较器Comparator
- JAVA对象比较器Comparator
- JAVA外部比较器:实现Comparator接口
- Java 比较器 comparator
- java 基于comparator的比较器
- JAVA对象比较器Comparator
- 【Java常用类库】_比较器(Comparable、Comparator)笔记
- Java常用类库--Arrays、比较器(comparable、Comparator)
- JAVA对象比较器Comparator
- JAVA常用类库---比较器(Comparable、Comparator)
- java学习笔记13--比较器(Comparable、Comparator)
- Java原来如此-比较器(Comparable、Comparator)