Comparable接口的特点:
1. 在内部实现,进行比较;
2. 需要实现的方法 public int compareTo(Obj o);
3. 数组排序时直接调用Collections.sort()方法;
以下是Comparable接口实现的排序
首先定义学生类,实现Comparable接口:
package test;
public class Student implements Comparable{
private int id;
public Student(int age,String name,String birth){
this.age=age;
this.name=name;
this.birth=birth;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
private int age;
private String name;
private String birth;
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
@Override
public int compareTo(Object arg0) {
Student t=(Student) arg0;
//return t.getBirth().compareTo(this.birth);
return t.getAge()-this.age;
}
}
在最后调用了compareTo方法,然后对学生的年龄进行比较,此方法使用的是按年龄倒序排列,如果要比较出生日期,则把返回值替换成注释代码即可。之后在主函数调用sort()函数,如下
package test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class compare1 {
public static void main(String[] args) {
List<Student> list=new ArrayList<Student>();
Student t1=new Student(10,"zz","19940524");
Student t2=new Student(11, "zxy", "19931030");
Student t3=new Student(12, "fx", "19940120");
list.add(t1);
list.add(t2);
list.add(t3);
Collections.sort(list);
for(int i=0;i<list.size();i++){
Student t=list.get(i);
System.out.println(t.getAge());
}
}
}
输出结果:
12
11
10
Comparator方法的特点:
1. 外部编写的比较器
2. 实现接口,需要重新改写public int compare(obj o1,obj o2)方法
3. 调用Collections.sort(list,sort.class)
具体实现方法如下图,首先建立Student实体,不需要实现接口
package test;
public class Student{
private int id;
public Student(int age,String name,String birth){
this.age=age;
this.name=name;
this.birth=birth;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
private int age;
private String name;
private String birth;
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
}
建立完实体表后,重新建一个类去实现Comparator接口,改写compare方法,如下
import java.util.Comparator;
public class sortclass implements Comparator {
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
Student s1=(Student) o1;
Student s2=(Student) o2;
int f=s2.getBirth().compareTo(s1.getBirth());
return f;
}
}
在这里是按照学生的出生日期的降序排列,最后在main函数调用方法
package test;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class Compare {
public static void main(String[] args) {
List<Student> list=new ArrayList<Student>();
Student t1=new Student(10,"zz","19940524");
Student t2=new Student(11, "zxy", "19931030");
Student t3=new Student(12, "fx", "19940120");
list.add(t1);
list.add(t2);
list.add(t3);
sortclass sort=new sortclass();
Collections.sort(list,sort);
for(int i=0;i<list.size();i++){
Student t=list.get(i);
System.out.println(t.getBirth());
}
}
}
19940524
19940120
19931030