comparable同comparator区别

本文详细介绍了Java中排序的三种方式:简单类型排序、内部对象实现Comparable接口和外部对象实现Comparator接口。通过具体案例展示了每种排序方法的具体实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分三种情况:

简单类型排序。

内部对象实现comparable。

外部对象实现comparator。


1、简单类型的排序

简单类型不外是byte, char, short, int, long, float, double等数据类型, 这些类型不能放在聚集中,只能使用数组。java.util.Arrays方法提供了对这些类型的sort方法(实际上还有很多其他有用的方法),下面是对一个简单的int数组排序:

             int[] arr = {2, 3, 1,10,7,4};

              System.out.print("before sort: ");

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

                     System.out.print(arr[i] + " ");

              System.out.println();            

              Arrays.sort(arr);

              System.out.print("after sort: ");

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

                     System.out.print(arr[i] + " ");

              System.out.println();      

输出结果:

before sort: 2 3 1 10 7 4

after sort: 1 2 3 4 7 10

我们看到排序结果是按照升序排列的,下面的排序都是如此。

 

Comparable & Comparator 都是用来实现集合中的排序的,只是Comparable是在集合内部定义的方法实现的排序,Comparator是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义Comparator接口的方法 或 在集合内实现Comparable接口的方法。

 

2、内部对象实现comparable。


案例:

class Programmer implements Comparable{

       private String name;

       private String language;

       private double pay;

      

       public Programmer(String name, String language, double pay) {

              this.name = name;

              this.language = language;

              this.pay = pay;

       }

       public int compareTo(Object o) {

              Programmer other = (Programmer)o;

              return (int)pay - (int)other.pay;

       }

       public String toString(){

              return "{name: " + name + ", language: " + language + ", money: " + pay + "}";

       }

}

对其进行排序:

              ArrayList list = new ArrayList();

              list.add(new Programmer("张三", "C", 12000));

              list.add(new Programmer("李四", "Java", 200));

              list.add(new Programmer("王五", "C++", 5000));

              list.add(new Programmer("钱六", "VB", 3000));

              System.out.println("before sort: " + list);

              Collections.sort(list);

              System.out.println("after sort: " + list);

 

3、外部对象实现comparator。


案例:

import java.util.Arrays;
import java.util.Comparator;

public class SampleComparator implements Comparator {

   public int compare(Object o1, Object o2) {
     return toInt(o1) - toInt(o2);
   }

   private int toInt(Object o) {
     String str = (String) o;
     str = str.replaceAll("一", "1");
     str = str.replaceAll("二", "2");
     str = str.replaceAll("三", "3");
     //
     return Integer.parseInt(str);
   }

   /**
    * 测试方法
    */
   public static void main(String[] args) {
     String[] array = new String[] { "一二", "三", "二" };
     Arrays.sort(array, new SampleComparator());
     for (int i = 0; i < array.length; i++) {
       System.out.println(array[i]);
     }
   }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值