Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 428|回复: 0

[Java基础知识]JAVA中使用Comparator和Comparable排序

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-9-30 17:42:51 | 显示全部楼层 |阅读模式
    当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序。 一、Comparator    强行对某个对象collection进行整体排序的比较函数,可以将Comparator传递给Collections.sort或Arrays.sort。 接口方法:
    /**
    * @return o1小于、等于或大于o2,分别返回负整数、零或正整数。
    */
        int compare(Object o1, Object o2); 案例:  
      
       
       

         
       

         
       
      

    1. import java.util.Arrays;
    2. import java.util.Comparator;
    3. public class SampleComparator implements Comparator {
    4.   public int compare(Object o1, Object o2) {
    5.     return toInt(o1) - toInt(o2);
    6.   }
    7.   private int toInt(Object o) {
    8.     String str = (String) o;
    9.     str = str.replaceAll("一", "1");
    10.     str = str.replaceAll("二", "2");
    11.     str = str.replaceAll("三", "3");
    12.     //
    13.     return Integer.parseInt(str);
    14.   }
    15.   /**
    16.    * 测试方法
    17.    */
    18.   public static void main(String[] args) {
    19.     String[] array = new String[] { "一二", "三", "二" };
    20.     Arrays.sort(array, new SampleComparator());
    21.     for (int i = 0; i < array.length; i++) {
    22.       System.out.println(array[i]);
    23.     }
    24.   }
    25. }
    复制代码
    C:hdu>java SampleComparator


    一二

    二、Comparable   强行对实现它的每个类的对象进行整体排序,实现此接口的对象列表(和数组)可以通过Collections.sort或Arrays.sort进行自动排序。 接口方法:
    /**
    * @return 该对象小于、等于或大于指定对象o,分别返回负整数、零或正整数。
    */
       int compareTo(Object o);
    假设对象User,需要按年龄排序: 改造后的对象:
    1. import java.util.Arrays;
    2. public class User implements Comparable {
    3.   private String id;
    4.   private int age;
    5.   public User(String id, int age) {
    6.     this.id = id;
    7.     this.age = age;
    8.   }
    9.   public int getAge() {
    10.     return age;
    11.   }
    12.   public void setAge(int age) {
    13.     this.age = age;
    14.   }
    15.   public String getId() {
    16.     return id;
    17.   }
    18.   public void setId(String id) {
    19.     this.id = id;
    20.   }
    21.   public int compareTo(Object o) {
    22.     return this.age - ((User) o).getAge();
    23.   }
    24.   /**
    25.    * 测试方法
    26.    */
    27.   public static void main(String[] args) {
    28.     User[] users = new User[] { new User("a", 30), new User("b", 20) };
    29.     Arrays.sort(users);
    30.     for (int i = 0; i < users.length; i++) {
    31.       User user = users[i];
    32.       System.out.println(user.getId() + " " + user.getAge());
    33.     }
    34.   }
    35. }
    复制代码
    C:hdu>javac User.java C:hdu>java User
    b 20
    a 30 三、Comparator和Comparable的区别 先看一下使用Comparator对User集合实现排序的方式:
    1. import java.util.Arrays;
    2. import java.util.Comparator;
    3. public class UserComparator implements Comparator {
    4.   public int compare(Object o1, Object o2) {
    5.     return ((User) o1).getAge() - ((User) o2).getAge();
    6.   }
    7.   /**
    8.    * 测试方法
    9.    */
    10.   public static void main(String[] args) {
    11.     User[] users = new User[] { new User("a", 30), new User("b", 20) };
    12.     Arrays.sort(users, new UserComparator());
    13.     for (int i = 0; i < users.length; i++) {
    14.       User user = users[i];
    15.       System.out.println(user.getId() + " " + user.getAge());
    16.     }
    17.   }
    18. }
    复制代码
    C:hdu>java UserComparator
    b 20
    a 30    一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。 Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:
    1、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
    2、可以使用多种排序标准,比如升序、降序等
      

      
      
       
       

         
       

         
       
      
    复制代码
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-20 20:26 , Processed in 0.457165 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表