• 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、可以使用多种排序标准,比如升序、降序等。

  • 相关阅读:
    Unity--截取屏幕任意区域
    IOS 提交审核,遇到Missing Push Notification Entitlement 问题。
    VSync Count 垂直同步
    unity3d 自动保存
    首次发布App,In-App Purchase 无法submit for review 问题的解决方案
    国内银行CNAPS CODE 查询
    苹果开发——App内购以及验证store的收据(二)
    C#
    AJAX
    SQLite连接C#笔记
  • 原文地址:https://www.cnblogs.com/yunger/p/5758302.html
Copyright © 2020-2023  润新知