• 引用类型的内置类大小比较(用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 }
  • 相关阅读:
    [BZOJ4553][TJOI2016&HEOI2016]序列
    树套树乱讲的代码
    树套树乱讲
    [Luogu4174][NOI2006]最大获益
    [BZOJ3879]SvT
    [BZOJ3611][HEOI2014]大工程
    [BZOJ1501][NOI2005]智慧珠游戏
    [BZOJ1499][NOI2005]瑰丽华尔兹
    [BZOJ3460] Jc的宿舍
    [HDU4812]D Tree
  • 原文地址:https://www.cnblogs.com/swimminglover/p/8321038.html
Copyright © 2020-2023  润新知