zoukankan      html  css  js  c++  java
  • Java中Comparable和Comparator实现对象比较

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

     1 import java.util.Arrays;
     2 public class ComparableUser implements Comparable {
     3 
     4     private String id;
     5     private int age;
     6 
     7     public ComparableUser(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 - ((ComparableUser) o).getAge();
    30     }
    31 
    32     /**
    33      * 测试方法
    34      */
    35     public static void main(String[] args) {
    36         ComparableUser[] users = new ComparableUser[] {
    37                 new ComparableUser("u1001", 25),
    38                 new ComparableUser("u1002", 20),
    39                 new ComparableUser("u1003", 21) };
    40         Arrays.sort(users);
    41         for (int i = 0; i < users.length; i++) {
    42             ComparableUser user = users[i];
    43             System.out.println(user.getId() + " " + user.getAge());
    44         }
    45     }
    46 
    47 }

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

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

    选择Comparable接口还是Comparator?

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

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

  • 相关阅读:
    bzoj1015星球大战(并查集+离线)
    bzoj1085骑士精神(搜索)
    bzoj1051受欢迎的牛(Tarjan)
    左偏树学习
    hdu1512 Monkey King(并查集,左偏堆)
    左偏树(模板)
    PAT (Basic Level) Practice (中文) 1079 延迟的回文数 (20分) (大数加法)
    PAT (Basic Level) Practice (中文) 1078 字符串压缩与解压 (20分) (字符转数字——栈存放)
    PAT (Basic Level) Practice (中文) 1077 互评成绩计算 (20分) (四舍五入保留整数)
    PAT (Basic Level) Practice (中文) 1076 Wifi密码 (15分)
  • 原文地址:https://www.cnblogs.com/yunger/p/5758302.html
Copyright © 2011-2022 走看看