开发肯定会涉及到排序,在java中,普通的数值排序直接使用一系列的算法即可,如果是对象的复杂排序,则可以使用comparable和comparator两个接口来实现,他们两者的区别如下
1 comparable是java.lang包下面的,是使得对象本身即可排序,将对象实现该接口,实现compareTo方法即可,比较该对象本身和传递对象的顺序,通过指定的字段进行比较,如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。比较时,对象可以放在一个数组或者其他集合中,数组使用Arrays.sort(array),集合使用Collections.sort(list)。
2 comparator 是java.util包下面,指使用一个专用的比较器对对象进行比较,他是一个策略模式,对象本身不用实现任何方法和接口,在比较对象时,通过传入对应的比较策略进行比较。数组使用Arrays.sort(array,comparatorStrategy),集合使用Collections.sort(list,comparatorStrategy)。
eg:
public class Student implements Comparable<Student> {
private int age;
private String name;
private int sex;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSex() {
return sex;
}
public void setSex(int sex) {
this.sex = sex;
}
@Override
public int compareTo(Student o) {
if (this.getAge() > o.getAge())
return 1;
else if (this.getAge() < o.getAge())
return -1;
else
return 0;
}
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
return sb.append("姓名:").append(this.getName()).append("年龄:").append(age).append("性别:").append(this.getSex() >= 1 ? "男":"女").toString();
}
}
待排序的实体
年龄排序器
import java.util.Comparator;
public class AgeComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
if (o1.getAge() > o2.getAge())
return 1;
else if (o1.getAge() < o2.getAge())
return -1;
else
return 0;
}
}
测试类
public class TestMain {
public static List<Student> setStudent() {
List<Student> list = new ArrayList<Student>();
Student s1 = new Student();
s1.setAge(12);
s1.setName("zhangsan");
s1.setSex(1);
Student s2 = new Student();
s2.setAge(11);
s2.setName("lisi");
s2.setSex(1);
Student s3 = new Student();
s3.setAge(13);
s3.setName("wangwu");
s3.setSex(0);
Student s4 = new Student();
s4.setAge(19);
s4.setName("zhaoliu");
s4.setSex(0);
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
return list;
}
public static void comparableSort() {
List<Student> l = setStudent();
System.out.println("未排序");
for (Student student : l) {
System.out.println(student);
}
//Collections.sort(l);
System.out.println("已排序");
for (Student student : l) {
System.out.println(student);
}
}
public static void comparatorSort() {
List<Student> l = setStudent();
System.out.println("未排序");
for (Student student : l) {
System.out.println(student);
}
AgeComparator a = new AgeComparator();
Collections.sort(l, a);
System.out.println("已排序");
for (Student student : l) {
System.out.println(student);
}
}
public static void main(String[] args) {
comparatorSort();
}
}
相关推荐
Java中Comparable和Comparator的区别共3页.pdf.zip
本文,先介绍Comparable 和Comparator两个接口,以及它们的差异;接着,通过示例,对它们的使用方法进行说明
java中Comparable和Comparator的区别 简介 java.lang.Comparable和java.util.Comparator是两个容易混淆的接口,两者都带有比较的意思,那么两个接口到底有什么区别,分别在什么情况下使用呢? Comparable Comparable...
主要介绍了详解Java中Comparable和Comparator接口的区别的相关资料,希望通过本文大家能彻底掌握这部分内容,需要的朋友可以参考下
主要介绍了Java Comparable和Comparator对比详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
用Comparator 的好处是不需要修改源代码, 而是另外实现一个比较器, 当某个自定义的对象需要作比较的时候,把比较器和对象一起传递过去就可以比大小了, 并
Comparable&Comparator区别,看完就明白了
NULL 博文链接:https://gghaomm.iteye.com/blog/1753970
通过简单的例子初步了解Comparable和Comparator的使用,注释很详细
主要介绍了Java Comparable 和 Comparator 的详解及区别的相关资料,Comparable 自然排序和Comparator 定制排序的实例,需要的朋友可以参考下
主要针对Java中Comparable和Comparator对象进行比较,感兴趣的小伙伴们可以参考一下
详细的介绍了Java中Comparable与Comparator的区别
Comparable与Comparator的区别Java开发Java经验技巧共3页.pdf.zip
java排序Comparator和Comparable
主要介绍了java 中Comparable与Comparator详解与比较的相关资料,需要的朋友可以参考下
Comparable和Comparator接口都可用作普通意义上对象间的比大小,但两个接口在实例化方面的用法不尽相同,接下来我们就来详细对比Java中的Comparable排序接口和Comparator比较器接口
要注意的是List,Set,Queue继承了Collection接口,...这里想用一个简单的例子展示一下他们的使用,内容包括:List、Map、Set、Queue,Collections、Comparable与Comparator,排序、搜索,内部类,泛型、重写equals、hashCode
comparator接口与Comparable接口的区别
Java-中的-Comparator-和-Comparable.md