java中对集合或数组进行排序有两种方法:Comparable 与 Comparator
来源:互联网 发布:2015最好的网络机顶盒 编辑:程序博客网 时间:2024/06/15 12:48
对集合或数组进行排序有两种方法:
1 集合中的对象所属的类实现了java.lang.Comparable 接口
然后调用Collections.sort()或者Arrays.sort()可直接对该集合中的对象排序。
public interface Comparable<T>{
publicint compareTo(T o)
}
此接口强行对实现它的每个类的对象进行整体排序,这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。
注:对于实现Comparable接口的类 C 的每一个 e1 和 e2 来说,当且仅当 e1.compareTo(e2)== 0 与 e1.equals(e2) 具有相同的 boolean 值时,类 C 的自然排序才叫做与 equals 一致。注意,null 不是任何类的实例,即使 e.equals(null) 返回 false,e.compareTo(null) 也将抛出NullPointerException。建议(虽然不是必需的)最好使自然排序与 equals 一致。这是因为在使用自然排序与equals 不一致的元素(或键)时,没有显式比较器的有序集合(和有序映射表)行为表现“怪异”。尤其是,这样的有序集合(或有序映射表)违背了根据 equals 方法定义的集合(或映射表)的常规协定。
例子:
/**
利用 Comparable 接口创建自己的类的排序顺序,只是实现 compareTo() 方法的问题。通常就是依赖几个数据成员的自然排序。同时类也应该覆盖 equals() 和 hashCode() 以确保两个相等的对象返回同一个哈希码。
这个接口的作用:如果数组或者集合中的(类)元素实现了该接口的话 , 我们就可以调用 Collections.sort和 Arrays.sort 排序,或应用于有序集合 TreeSet 和 TreeMap 中。
*/
public class Person implementsjava.lang.Comparable{
privatefinal int id;
privateString name;
privateint age;
publicPerson(int id,String name,int age){
super();
this.id= id;
this.name= name;
this.age= age;
}
//实现 Comparable 接口的抽象方法,定义排序规则
@Override
publicint compareTo(Object o) {
Personper = (Person)o;
returnthis.id - per.id;
}
}
也可以:
public class Person implementsjava.lang.Comparable<Person>{
privatefinal int id;
privateString name;
privateint age;
publicPerson(int id,String name,int age){
super();
this.id= id;
this.name= name;
this.age= age;
}
//实现 Comparable 接口的抽象方法,定义排序规则
@Override
publicint compareTo(Person o) {
returnthis.id - per.id;
}
}
2 实现java.lang.Comparator接口
把这个实现接口的类作为参数传递给上述的sort()方法。
public interface Comparator<T>{
public int compare(To1,T o2) ;
boolean equals(Object obj) ;
}
必须实现compare方法,建议在其作用类中实现equals方法(Object有默认的equals实现,所以子类非必须实现)
例子:
在Arrays类里:
public static <T> void sort(T[]a, Comparator<? super T> c)
- java中对集合或数组进行排序有两种方法:Comparable 与 Comparator
- TreeSet(有序集合)对Comparable元素的排序(或使用Comparator)与元素equals方法的关系
- Java集合中Comparable与Comparator
- 通过Comparator和Comparable对集合进行排序
- java中Comparator的用法(用于集合对象或数组对象进行排序)
- [java集合]comparable与comparator
- Java集合排序方法comparable和comparator的总结
- [基础回顾-JAVA类集框架篇] 之 集合排序Comparable与Comparator(中)
- java集合中对象某属性比较排序Comparable与Comparator
- java集合中对象某属性比较排序Comparable与Comparator
- java集合中对象某属性比较排序Comparable与Comparator
- java集合中对象某属性比较排序Comparable与Comparator
- 集合, 数组,Comparable,Comparator
- 集合排序 Comparator Comparable
- 集合排序 Comparator Comparable
- java 集合排序(Comparable、Comparator)
- java集合中Comparable和Comparator辨析
- java集合中Comparable和Comparator辨析
- 红黑树的插入删除完整版以及java版本
- python中%r和%s的区别
- VM-ware 虚拟机不能全屏解决方法
- pkg: /data/local/tmp/com.imooc.systeminfo Failure [INSTALL_FAILED_OLDER_SDK]
- 建立能与访问者相互通信的本地服务
- java中对集合或数组进行排序有两种方法:Comparable 与 Comparator
- Kth Smallest Element in a BST
- 数组不能有nil的对象,字典不能插入nil的值
- androidstudio 查看数字签名
- 归并排序
- QT5 学习之路30---Graphics View Framework
- symfony报错:Warning: ob_start(): function ” not found or invalid function name Symfony
- 折半插入
- 哈希表及处理冲突的方法