comparable同comparator区别

来源:互联网 发布:拉杆书包的感受 知乎 编辑:程序博客网 时间:2024/04/28 08:31

分三种情况:

简单类型排序。

内部对象实现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]);
     }
   }

}

原创粉丝点击