引用类型的内置类大小比较(用Comparable接口实现)——高淇JAVA300讲笔记之Comparable接口

  “排序”的实体类都实现了java.lang.Comparable接口。Comparable接口中只有一个方法:

  public int compareTo(Object obj);

  该方法:

      返回0    this == obj

      返回正数    this > obj

      返回负数    this < obj

  实现了Comparable接口的类通过实现compareTo方法从而确定该类对象的排序方式。

一、引用数据类型

1、内置类

(1)整数、小数Integer Float Double 直接比较基本数据类型的大小

(2)字符:比较unicode码之差

(3)字符串:

    1)如果其中一个是另外一个字符串起始开始的子串,返回长度只差。

    例如:“abc”和“abcdef”返回-3

    2)否则返回第一个不相等的unicode码之差

    例如:“abc”和"aef"比的是“b”和“e”,结果是-3

(4)java.util.Date:根据日期的长整型数比较

   下面是例子。

先写一个工具类Utils。里面用到了冒泡排序。在排序时不是用大于小于号去比较大小,而是用compareTo方法。

 1 package com.bjsxt.sort.innerType;
 2 
 3 import java.util.List;
 4 
 5 /**
 6  * 排序
 7  *
 8  */
 9 public class Utils {
10     /**
11      * 容器排序(使用泛型方法)
12      */
13     public static <T extends Comparable<T>> void sort(List<T> list) {
14         //第一步:转成数组
15         Object[] arr = list.toArray();
16         sort(arr);
17         //第二步:改变容器中对应的值
18         for(int i=0;i<arr.length;i++) {
19             list.set(i, (T)(arr[i]));
20         }
21     }
22     
23     /**
24      * 数组排序(使用泛型方法)
25      */
26     public static <T extends Comparable<T>> void sort(T[] arr) {
27         //从大到小排序
28         boolean sorted = true;
29         int len = arr.length;
30         for(int j=0;j<len-1;j++) {
31             sorted = true;
32             for(int i=0;i<len-1-j;i++) {
33                 if(((Comparable)arr[i]).compareTo(arr[i+1])<0) {
34                     T temp = arr[i];
35                     arr[i] = arr[i+1];
36                     arr[i+1] = temp;
37                     sorted = false;
38                 }
39             }
40             if(sorted) {
41                 break;
42             }
43         }
44     }
45     
46     
47     /**
48      * 数组的排序(降序)
49      * @param arr
50      */
51     public static void sort(Object[] arr) {
52         //从大到小排序
53         boolean sorted = true;
54         int len = arr.length;
55         for(int j=0;j<len-1;j++) {
56             sorted = true;
57             for(int i=0;i<len-1-j;i++) {
58                 if(((Comparable)arr[i]).compareTo(arr[i+1])<0) {
59                     Object temp = arr[i];
60                     arr[i] = arr[i+1];
61                     arr[i+1] = temp;
62                     sorted = false;
63                 }
64             }
65             if(sorted) {
66                 break;
67             }
68         }
69     }
70 }

然后写几个例子用一下工具类看看。

 1 package com.bjsxt.sort.innerType;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Arrays;
 5 import java.util.Date;
 6 import java.util.List;
 7 
 8 public class Demo04 {
 9     public static void main(String[] args) {
10         Date[] arr = new Date[3];
11         arr[0] = new Date();
12         arr[1] = new Date(System.currentTimeMillis() - 1000*60*60);
13         arr[2] = new Date(System.currentTimeMillis() + 1000*60*60);
14         
15         Utils.sort(arr);  //降序
16         System.out.println(Arrays.toString(arr));
17         //结果是:[Sat Jan 20 16:52:50 CST 2018, Sat Jan 20 15:52:50 CST 2018, Sat Jan 20 14:52:50 CST 2018]
18         
19         //字符串
20         String[] arr2 = {"a","abcd","abc","def"};
21         Utils.sort(arr2);
22         System.out.println(Arrays.toString(arr2));
23         //结果是:[def, abcd, abc, a]
24         
25         System.out.println("=========List排序==========");
26         //存放容器中
27         List<String> list = new ArrayList<String>();
28         list.add("a");
29         list.add("abcd");
30         list.add("abc");
31         list.add("def");
32         Utils.sort(list);
33         System.out.println(list);
34         //结果是:[def, abcd, abc, a]
35     }
36 }
原文地址:https://www.cnblogs.com/swimminglover/p/8321038.html