java comparator和comparable两种比较器比较

来源:互联网 发布:java 短信验证码校验 编辑:程序博客网 时间:2024/04/30 07:39
Comparable 和 Comparator 都是用来实现集合中的排序的,只是Comparable是在集合内部定义的方法实现的排序  Comparator是在集合外部实现的排序所以,如想实现排序,就需要在集合外定义Comparator接口的方法compare()或在集合内实现Comparable接口的方法compareTo()  Comparable是一个对象本身就已经支持自比较所需要实现的接口(如String Integer自己就可以完成比较大小操作)       而Comparator是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。 实现这个接口comparable里的函数compareTo,可以自定义比较的方法,就是想怎么比较怎么比较;但是comparator是一个比较器,可以实现很多的比较器,比如说要比较一些人,你可以实现一个按照年龄比较的比较器,也可以实现一个按照高度比较的比较器,如果你要按照不同方式比较的话,可以让那人实现comparable接口,然后再compareTo函数里调用不同的比较器第一种Comparator接口比较器:User1.java
Java代码  
  1. public class User1 {  
  2.     public String getName() {  
  3.         return name;  
  4.     }  
  5.     public void setName(String name) {  
  6.         this.name = name;  
  7.     }  
  8.     public int getAge() {  
  9.         return age;  
  10.     }  
  11.     public void setAge(int age) {  
  12.         this.age = age;  
  13.     }  
  14.     private String name;  
  15.     private int age;  
  16.       
  17.       

MyComparator.java

Java代码  
  1. import java.util.Comparator;  
  2.   
  3. public class MyComparator implements Comparator{  
  4.   
  5.     public int compare(Object o1, Object o2) {  
  6.         if(null==o1||null==o2){  
  7.             return -1;  
  8.         }  
  9.         User2 u1=(User2) o1;  
  10.         User2 u2=(User2) o2;  
  11.         if (u1.getAge() > u2.getAge()) {    
  12.             return 1// 第一个大于第二个    
  13.         } else if (u1.getAge() < u2.getAge()) {    
  14.             return -1;// 第一个小于第二个    
  15.         } else {    
  16.             return 0// 等于    
  17.         }    
  18.     }  
  19.   
Test.java
Java代码
  1. import java.util.ArrayList;  
  2. import java.util.Collections;  
  3. import java.util.List;  
  4.   
  5. public class Test {  
  6.   
  7.     /** 
  8.      * @param args 
  9.      */  
  10.     public static void main(String[] args) {  
  11.         // 接口比较器比较,是定义在类的外部的,它不会破坏user2本身  
  12.         List list = new ArrayList();  
  13.         User2 u1 = new User2();  
  14.         u1.setName("aaa");  
  15.         u1.setAge(10);  
  16.         list.add(u1);  
  17.         User2 u2 = new User2();  
  18.         u2.setName("bbb");  
  19.         u2.setAge(30);  
  20.         list.add(u2);  
  21.         User2 u3 = new User2();  
  22.         u3.setName("ccc");  
  23.         u3.setAge(20);  
  24.         list.add(u3);  
  25.         Collections.sort(list, new MyComparator());  
  26.         for (int i = 0; i < list.size(); i++) {  
  27.             User2 u = (User2) list.get(i);  
  28.             System.out.println(u.getAge());  
  29.         }  
  30.     }  
第二种 类比较器ComparableUser.java

Java代码  
  1. public class User implements Comparable{  
  2.     public String getName() {  
  3.         return name;  
  4.     }  
  5.     public void setName(String name) {  
  6.         this.name = name;  
  7.     }  
  8.     public int getAge() {  
  9.         return age;  
  10.     }  
  11.     public void setAge(int age) {  
  12.         this.age = age;  
  13.     }  
  14.     private String name;  
  15.     private int age;  
  16.       
  17.     public int compareTo(Object o) {  
  18.         User u=(User) o;  
  19.         if(null==u){  
  20.             return -1;  
  21.         }  
  22.         if (this.age > u.getAge()) {    
  23.             return 1// 第一个大于第二个    
  24.         } else if (this.age < u.getAge()) {    
  25.             return -1;// 第一个小于第二个    
  26.         } else {    
  27.             return 0// 等于    
  28.         }    
  29.     }  
Test.java
Java代码  收藏代码
  1. import java.util.ArrayList;  
  2. import java.util.Collections;  
  3. import java.util.List;  
  4.   
  5. public class Test {  
  6.   
  7.     /** 
  8.      * @param args 
  9.      */  
  10.     public static void main(String[] args) {  
  11.   
  12.         // 类比较器Comparable  
  13.         // Comparable是在内部定义的方法实现的排序.它将会改变对象(User)本身  
  14.         List list = new ArrayList();  
  15.         User u1 = new User();  
  16.         u1.setName("aaa");  
  17.         u1.setAge(10);  
  18.         list.add(u1);  
  19.         User u2 = new User();  
  20.         u2.setName("bbb");  
  21.         u2.setAge(30);  
  22.         list.add(u2);  
  23.         User u3 = new User();  
  24.         u3.setName("ccc");  
  25.         u3.setAge(20);  
  26.         list.add(u3);  
  27.   
  28.         Collections.sort(list);  
  29.         for (int i = 0; i < list.size(); i++) {  
  30.             User u = (User) list.get(i);  
  31.             System.out.println(u.getAge());  
  32.         }  
  33.     }  
  34.   
可以看到,使用comparator比comparable更加灵活