Java中Comparable和Comparator实现对象比较

来源:互联网 发布:酷我音乐盒mac旧版本 编辑:程序博客网 时间:2024/04/28 06:35

JavaComparableComparator实现对象比较

    当需要排序的集合或数组不是单纯的数字型时,通常可以使用ComparatorComparable,以简单的方式实现对象排序或自定义排序。下面通过两个例子分别用ComparableComparator实现对User对象中年龄排序。

 

1.通过实现Comparable接口,根据User的年龄进行排序。

 

Java代码

  1. import java.util.Arrays;   
  2.   
  3. /**  
  4.  *   
  5.  *   
  6.  */  
  7. public class ComparableUser implements Comparable {   
  8.   
  9.     private String id;   
  10.     private int age;   
  11.   
  12.     public ComparableUser(String id, int age) {   
  13.         this.id = id;   
  14.         this.age = age;   
  15.     }   
  16.   
  17.     public int getAge() {   
  18.         return age;   
  19.     }   
  20.   
  21.     public void setAge(int age) {   
  22.         this.age = age;   
  23.     }   
  24.   
  25.     public String getId() {   
  26.         return id;   
  27.     }   
  28.   
  29.     public void setId(String id) {   
  30.         this.id = id;   
  31.     }   
  32.   
  33.     public int compareTo(Object o) {   
  34.         return this.age - ((ComparableUser) o).getAge();   
  35.     }   
  36.   
  37.     /**  
  38.      * 测试方法  
  39.      */  
  40.     public static void main(String[] args) {   
  41.         ComparableUser[] users = new ComparableUser[] {   
  42.                 new ComparableUser("u1001", 25),   
  43.                 new ComparableUser("u1002", 20),   
  44.                 new ComparableUser("u1003", 21) };   
  45.         Arrays.sort(users);   
  46.         for (int i = 0; i < users.length; i++) {   
  47.             ComparableUser user = users[i];   
  48.             System.out.println(user.getId() + " " + user.getAge());   
  49.         }   
  50.     }   
  51.   
  52. }  

import java.util.Arrays;

 

/**

 *

 *

 */

public class ComparableUser implements Comparable {

 

private String id;

private int age;

 

public ComparableUser(String id, int age) {

  this.id = id;

  this.age = age;

}

 

public int getAge() {

  return age;

}

 

public void setAge(int age) {

  this.age = age;

}

 

public String getId() {

  return id;

}

 

public void setId(String id) {

  this.id = id;

}

 

public int compareTo(Object o) {

  return this.age - ((ComparableUser) o).getAge();

}

 

/**

 * 测试方法

 */

public static void main(String[] args) {

  ComparableUser[] users = new ComparableUser[] {

    new ComparableUser("u1001", 25),

    new ComparableUser("u1002", 20),

    new ComparableUser("u1003", 21) };

  Arrays.sort(users);

  for (int i = 0; i < users.length; i++) {

   ComparableUser user = users[i];

   System.out.println(user.getId() + " " + user.getAge());

  }

}

 

}

 

 

2. 通过实现Comparator接口,根据User的年龄进行排序。

 

Java代码

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

public class User {

 

private String id;

private int age;

 

public User(String id, int age) {

  this.id = id;

  this.age = age;

}

 

public int getAge() {

  return age;

}

 

public void setAge(int age) {

  this.age = age;

}

 

public String getId() {

  return id;

}

 

public void setId(String id) {

  this.id = id;

}

 

}

 

Java代码

  1. import java.util.Arrays;   
  2. import java.util.Comparator;   
  3.   
  4. /**  
  5.  *
  6.  *   
  7.  */  
  8. public class UserComparator implements Comparator {   
  9.   
  10.     public int compare(Object arg0, Object arg1) {   
  11.         return ((User) arg0).getAge() - ((User) arg1).getAge();   
  12.     }   
  13.   
  14.     /**  
  15.      * 测试方法  
  16.      */  
  17.     public static void main(String[] args) {   
  18.         User[] users = new User[] { new User("u1001", 25),   
  19.                 new User("u1002", 20), new User("u1003", 21) };   
  20.         Arrays.sort(users, new UserComparator());   
  21.         for (int i = 0; i < users.length; i++) {   
  22.             User user = users[i];   
  23.             System.out.println(user.getId() + " " + user.getAge());   
  24.         }   
  25.     }   
  26. }  

import java.util.Arrays;

import java.util.Comparator;

 

/**

 *

 *

 */

public class UserComparator implements Comparator {

 

public int compare(Object arg0, Object arg1) {

  return ((User) arg0).getAge() - ((User) arg1).getAge();

}

 

/**

 * 测试方法

 */

public static void main(String[] args) {

  User[] users = new User[] { new User("u1001", 25),

    new User("u1002", 20), new User("u1003", 21) };

  Arrays.sort(users, new UserComparator());

  for (int i = 0; i < users.length; i++) {

   User user = users[i];

   System.out.println(user.getId() + " " + user.getAge());

  }

}

}

 

选择Comparable接口还是Comparator

 一个类实现了Comparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。

Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:
1
、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
2
、可以使用多种排序标准,比如升序、降序等。

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 刚怀孕感冒了怎么办鼻塞流鼻涕 孕妇打喷嚏流鼻涕怎么办速效办法 宝宝流鼻涕一个月了怎么办 一个月婴儿感冒咳嗽流鼻涕怎么办 怎么办感冒能好得快些 一个月的宝宝流鼻涕怎么办 鼻炎犯了一直流鼻涕怎么办 宝宝流鼻涕鼻子擦破了怎么办 宝宝流鼻涕鼻子擦红了怎么办 上班忘记穿内衣了怎么办 早上上班忘记穿内衣了怎么办 高中知识都忘了怎么办 留鼻涕跟水一样怎么办 鼻涕像水一样流怎么办 肩膀很疼怎么办睡不着觉 夏天穿内衣出汗后很臭怎么办 脸过敏后严重缺水怎么办 过敏后脸上反复出现湿疹怎么办 孕妇脸上长湿疹过敏红肿怎么办 一岁宝宝一直流鼻涕怎么办 三岁宝宝一直流鼻涕怎么办 3岁宝宝一直流鼻涕不好怎么办 7岁半边鼻子不通气怎么办 感冒流鼻涕鼻子不通气怎么办 鼻子不通气干的怎么办 7个月婴儿流鼻涕怎么办 鼻子火辣辣的光想流鼻涕怎么办? 三岁宝宝鼻塞流鼻涕怎么办 一岁宝宝感冒流鼻涕鼻塞怎么办 1岁宝宝鼻塞流鼻涕怎么办 一岁多宝宝感冒鼻塞流鼻涕怎么办 宝宝鼻塞流鼻涕怎么办速效办法 八个月宝宝感冒流鼻涕鼻塞怎么办 7岁儿童流清鼻涕怎么办 1岁的宝宝流鼻涕怎么办 3岁宝宝鼻塞严重怎么办 宝宝流鼻涕2个月怎么办 一个月宝宝流鼻子怎么办 六个月宝宝流清水鼻涕怎么办 婴儿流鼻涕怎么办最简单方法 婴儿咳嗽流鼻涕怎么办最简单方法