Comparable接口
定义:Comparable位于包java.lang下,Comparable接口将比较代码嵌入自身类中。此接口能够通过实现comparaTo方法来达到对它的类对象进行排序的功能。实现了Comparable接口的对象可以通过Collections.sort()或Arrays.sort()完成排序。
用法:
继承Comparable接口,实现compareTo方法
class ClassName implements Comparable<ClassName>{
@Override
public int compareTo(ClassName o){
/*
代码
*/
}
}
测试代码如下:
import java.util.*;
class Person implements Comparable<Person>{
int age;
String name;
public Person(int age,String name){
this.age=age;
this.name=name;
}
@Override
public int compareTo(Person o){
//先按照年龄排序,再按照姓名排序
if(this.age!=o.age){
return this.age-o.age;
}else{
return this.name.compareTo(o.name);
}
}
@Override
public String toString(){
return "Person:[age= "+age+" , name= "+name+"]";
}
}
public class Test1{
public static void main(String[] args){
List<Person> list=new ArrayList<>();
Person p1=new Person(18,"abb");
Person p2=new Person(18,"bcc");
Person p3=new Person(17,"cdd");
list.add(p1);
list.add(p2);
list.add(p3);
System.out.println("排序前");
for(Person p:list){
System.out.println(p);
}
Collections.sort(list);
System.out.println("排序后");
for(Person p:list){
System.out.println(p);
}
}
}
结果如下:
Comparator接口
定义:Comparator位于包java.util下,可以在一个独立的类中实现比较。如果要比较的类没有实现Comparable接口,那么我们只能在另一个类中继承Comparator接口,重写compare方法。使用如下:Collections.sort(param1,比较类实例),Arrays.sort(param1,比较类实例)
用法:
class MyComparator implements Comparetor<ClassName>{
@Override
public int compare(ClassName o1,CLassName o2){
/*
代码块
*/
}
测试代码如下:
import java.util.*;
class Person{
int age;
String name;
public Person(int age,String name){
this.age=age;
this.name=name;
}
@Override
public String toString(){
return "Person:[age= "+age+" , name= "+name+"]";
}
}
//新建一个类
class MyComparator implements Comparator<Person>{
@Override
public int compare(Person o1,Person o2){
//先按照年龄排序,再按照姓名排序
if(o1.age!=o2.age){
return o1.age-o2.age;
}else{
return o1.name.compareTo(o2.name);
}
}
}
public class Test2{
public static void main(String[] args){
List<Person> list=new ArrayList<>();
Person p1=new Person(18,"abb");
Person p2=new Person(18,"bcc");
Person p3=new Person(17,"cdd");
list.add(p1);
list.add(p2);
list.add(p3);
System.out.println("排序前");
for(Person p:list){
System.out.println(p);
}
//在这里使用比较器
Collections.sort(list,new MyComparator());
System.out.println("排序后");
for(Person p:list){
System.out.println(p);
}
}
}
结果如下:
小结
Comparable接口:需要在同一个类中实现Comparable接口,重写compareTo方法。在排序时直接使用Collections.sort(param)或者Arrays.sort(param1).
Comparator接口:当一个类没有实现Comparable接口时,如果希望对该对象集合或数组进行排序,那么需要另一个类实现Comparator接口,重写compare方法。在排序时直接使用Collections.sort(param1,param2)或者Arrays.sort(param1,param2)。param2为新建类的实例。