黑马程序员技术交流社区

标题: Comparable和Comparator区别 [打印本页]

作者: nanfp    时间: 2015-7-8 22:23
标题: Comparable和Comparator区别
复习时,遇到这么个问题,网上搜了一下,分享给大家---Comparable和Comparator区别
Comparable :
Comparable 是排序接口。
若一个类实现了Comparable接口,就意味着“该类支持排序”。  即然实现Comparable接口的类支持排序,假设现在存在“实现Comparable接口的类的对象的List列表(或数组)”,则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序。
此外,“实现Comparable接口的类的对象”可以用作“有序映射(如TreeMap)”中的键或“有序集合(TreeSet)”中的元素,而不需要指定比较器。
示例代码
  1. import java.util.Arrays;   

  2. public class User implements Comparable<Object> {   
  3.    
  4.     private String id;   
  5.     private int age;   
  6.    
  7.     public User(String id, int age) {   
  8.         this.id = id;   
  9.         this.age = age;   
  10.     }   
  11.    
  12.     public int getAge() {   
  13.         return age;   
  14.     }   
  15.    
  16.     public void setAge(int age) {   
  17.         this.age = age;   
  18.     }   
  19.    
  20.     public String getId() {   
  21.         return id;   
  22.     }   
  23.    
  24.     public void setId(String id) {   
  25.         this.id = id;   
  26.     }  
  27.    
  28.     public int compareTo(Object o) {   
  29.         return this.age - ((User) o).getAge();   
  30.     }   

  31.    
  32.     /**  
  33.      * 测试方法  
  34.      */   
  35.     public static void main(String[] args) {   
  36.         User[] users = new User[] { new User("a", 30), new User("b", 20) };   
  37.         Arrays.sort(users);   
  38.         for (int i = 0; i < users.length; i++) {   
  39.             User user = users[i];   
  40.             System.out.println(user.getId() + " " + user.getAge());   
  41.         }   
  42.     }
  43.   
  44. }
复制代码


Comparator:
Comparator 是比较器接口。
我们若需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable接口);那么,我们可以建立一个“该类的比较器”来进行排序。这个“比较器”只需要实现Comparator接口即可。
也就是说,我们可以通过“实现Comparator类来新建一个比较器”,然后通过该比较器对类进行排序。
示例代码
  1. import java.util.Comparator;

  2. public class User{   
  3.    
  4.     private String id;   
  5.     private int age;   
  6.    
  7.     public User(String id, int age) {   
  8.         this.id = id;   
  9.         this.age = age;   
  10.     }   
  11.    
  12.     public int getAge() {   
  13.         return age;   
  14.     }   
  15.    
  16.     public void setAge(int age) {   
  17.         this.age = age;   
  18.     }   
  19.    
  20.     public String getId() {   
  21.         return id;   
  22.     }   
  23.    
  24.     public void setId(String id) {   
  25.         this.id = id;   
  26.     }  


  27.    
  28.     /**  
  29.      * 测试方法  
  30.      */   
  31.     public static void main(String[] args) {   
  32.         User[] users = new User[] { new User("a", 30), new User("b", 20) };   
  33.         Arrays.sort(users,new MyComparator());   
  34.         for (int i = 0; i < users.length; i++) {   
  35.             User user = users[i];   
  36.             System.out.println(user.getId() + " " + user.getAge());   
  37.         }   
  38.     }
  39.   
  40. }

  41. class MyComparator implements Comparator<Object> {   

  42.     public int compare(Object o1, Object o2) {   
  43.          return ((User) o1).getAge() - ((User) o2).getAge();     
  44.     }   
  45.       
  46. }
复制代码




作者: micro_hx    时间: 2015-7-9 00:07
ooooo,非常好啊,,,,
作者: very爱    时间: 2015-7-9 15:05
很不错!!
作者: 慕容旺财    时间: 2015-7-9 23:09
多谢! 其实这里我学的不是很扎实
作者: 825176857    时间: 2015-7-9 23:53

很不错!!学习学习!
作者: Yunny    时间: 2015-7-10 00:11
学习学习!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2