A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© nanfp 中级黑马   /  2015-7-8 22:23  /  938 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

复习时,遇到这么个问题,网上搜了一下,分享给大家---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. }
复制代码



评分

参与人数 1黑马币 +5 收起 理由
qwe23 + 5 很给力!

查看全部评分

5 个回复

正序浏览
Yunny 来自手机 中级黑马 2015-7-10 00:11:14
地板
学习学习!
回复 使用道具 举报

很不错!!学习学习!
回复 使用道具 举报
多谢! 其实这里我学的不是很扎实
回复 使用道具 举报
很不错!!
回复 使用道具 举报
ooooo,非常好啊,,,,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马