124_容器_内置类比较_Comparable_排序工具类实现

这里写图片描述

  • _1_InnerTypeCompare
package collection.sort.comparable;

import java.util.Date;

/**
 * 内置引用数据类型(常用)的比较
 */
public class _1_InnerTypeCompare {
    public static void main(String[] args) {
        @SuppressWarnings("unused")
        Integer  a ; //根据基本数据类型大小
        @SuppressWarnings("unused")
        Character ch; //根据Unicode编码顺序
        String str="abc"; //如果其中一个是例外一个起始开始的子串,返回长度之差
        String str2 ="abcd123";  //否则返回第一个不相等的unicode码之差
        System.out.println(str.compareTo(str2));
        str ="abc";
        str2 ="aad";
        System.out.println(str.compareTo(str2));
        @SuppressWarnings("unused")
        Date d ;  //根据日期的长整形数比较
    }
}
  • _2_StringArraySort
package collection.sort.comparable;

import java.util.Arrays;

public class _2_StringArraySort {
    public static void main(String[] args) {
        String[] arr ={"a","abcd","abc","def"};
        //从大到小排序 降序
        boolean sorted= true;
        int len =arr.length;
        for(int j=0;j<len-1;j++){ //趟数
            sorted =true; //假定有序
            for(int i=0;i<len-1-j;i++){ //次数
                if((arr[i]).compareTo(arr[i+1])<0){
                    String temp = arr[i];
                    arr[i] =arr[i+1];
                    arr[i+1] =temp;
                    sorted =false; //假定失败
                }
            }
            if(sorted){ //减少趟数
                break;
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}
  • _3_DateArraySort
package collection.sort.comparable;

import java.util.Arrays;
import java.util.Date;

public class _3_DateArraySort {
    public static void main(String[] args) {
        Date arr[] =new Date[3];
        arr[0] =new Date();
        arr[1] =new Date(System.currentTimeMillis()-1000*60*60);
        arr[2] =new Date(System.currentTimeMillis()+1000*60*60);
        //从大到小排序 降序
        boolean sorted= true;
        int len =arr.length;
        for(int j=0;j<len-1;j++){ //趟数
            sorted =true; //假定有序
            for(int i=0;i<len-1-j;i++){ //次数
                if((arr[i]).compareTo(arr[i+1])<0){
                    Date temp = arr[i];
                    arr[i] =arr[i+1];
                    arr[i+1] =temp;
                    sorted =false; //假定失败
                }
            }
            if(sorted){ //减少趟数
                break;
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}
  • CompareUtils
package collection.sort.comparable;

import java.util.List;

public class CompareUtils {
    /**
     * 数组的排序 (降序)
     * @param arr
     */
    @SuppressWarnings("unchecked")
    public static void sort(Object[] arr){
        //从大到小排序 降序
        boolean sorted= true;
        int len =arr.length;
        for(int j=0;j<len-1;j++){ //趟数
            sorted =true; //假定有序
            for(int i=0;i<len-1-j;i++){ //次数
                if(((Comparable<Object>)arr[i]).compareTo(arr[i+1])<0){
                    Object temp = arr[i];
                    arr[i] =arr[i+1];
                    arr[i+1] =temp;
                    sorted =false; //假定失败
                }
            }
            if(sorted){ //减少趟数
                break;
            }
        }
    }

    /**
     * 数组降序排序 (使用泛型方法)
     */
    public static <T extends Comparable<T>> void sort(T[] arr){
        //从大到小排序 降序
        boolean sorted= true;
        int len =arr.length;
        for(int j=0;j<len-1;j++){ //趟数
            sorted =true; //假定有序
            for(int i=0;i<len-1-j;i++){ //次数
                if((arr[i]).compareTo(arr[i+1])<0){
                    T temp = arr[i];
                    arr[i] =arr[i+1];
                    arr[i+1] =temp;
                    sorted =false; //假定失败
                }
            }
            if(sorted){ //减少趟数
                break;
            }
        }
    }   

    /**
     * 容器排序 (使用泛型方法)
     */
    @SuppressWarnings("unchecked")
    public static <T extends Comparable<T>> void sort(List<T> list){
        //第一步:转成数组
        Object[] arr =list.toArray();
        sort(arr);
        //第二步:改变容器中对应的值
        for(int i=0;i<arr.length;i++){
            list.set(i, (T)(arr[i]));
        }
    }
}
  • ComparableImpl
package collection.sort.comparable;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

public class ComparableImpl {
    public static void main(String[] args) {
        //时间
        Date[] arr =new Date[3];
        arr[0] =new Date();
        arr[1] =new Date(System.currentTimeMillis()-1000*60*60);
        arr[2] =new Date(System.currentTimeMillis()+1000*60*60);
        CompareUtils.sort(arr); //数组降序排序 (使用泛型方法)
        System.out.println(Arrays.toString(arr));

        //字符串
        String[] arr2 ={"a","abcd","abc","def"};
        CompareUtils.sort(arr2);//数组降序排序 (使用泛型方法)
        System.out.println(Arrays.toString(arr2));


        System.out.println("==========List排序===========");
        //存放容器中
        List<String> list =new ArrayList<String>();
        list.add("a");
        list.add("abcd");
        list.add("abc");
        list.add("def");
        CompareUtils.sort(list);//容器排序 (使用泛型方法)
        System.out.println(list);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值