• Java中Comparable和Comparator实现对象比较


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

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

    Java代码

    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.     }  

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

    Java代码

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

    选择Comparable接口还是Comparator?

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

    Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:

    1、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身;

    2、可以使用多种排序标准,比如升序、降序等。

     

  • 相关阅读:
    Mac电脑kernel_task占用内存过高
    Mac上的聚焦搜索无法查找到应用
    Mac电脑变卡的原因:
    IE浏览器整页截屏程序
    拓扑排序算法的一个应用
    简单演示mySQL后端数据库关系信息逆向加入到PowerDesigner的物理数据模型和概念数据模型中
    解密存储过程或函数
    C#画图
    .NET设计模式开篇
    非重复随机序列生成算法
  • 原文地址:https://www.cnblogs.com/likai198981/p/2848229.html
Copyright © 2020-2023  润新知