Java从大到小进行一维数组排序

自定义比较器类,继承Comparator,在Array.sort()中传入值。

public class Solution {

    public static void main(String[] args) {
		//不能用int数组,只能用Integer,因为必须是一个对象。
        Integer[] arr = {4, 6, 3, 9, 1, 5, 8};
        Mycomparator c = new Mycomparator();    // 实例化一个Comparator对象
        Arrays.sort(arr, c);
        for(Integer ele : arr) {
            System.out.print(ele +" ");
        }
    }
    // 运行后是从大到小排好序的
}
class Mycomparator implements Comparator<Integer> {
    @Override
    public int compare(Integer o1, Integer o2) {
        if(o1 > o2) // 默认是o1 < o2时返回-1, 一下同理
            return -1;
        if(o1 < o2)
            return 1;
        return 0;
    }
}

Arrays.sort(arr, c);,arr必须是Integer包装类数组。,但是Arrays.sort(arr);,arr可以是int数组,也可以是Integer数组。

1.对基本数据类型的数组的排序
 	说明:(1)Arrays类中的sort()使用的是“经过调优的快速排序法”;

     (2)比如int[],double[],char[]等基数据类型的数组,Arrays类之只是提供了默认的升序排列,没有提供相应的降序排列方法。

     (3)要对基础类型的数组进行降序排序,需要将这些数组转化为对应的封装类数组,如Integer[],Double[],Character[]等,对这些类数组进行排序。(其实还不如先进行升序排序,自己在转为将序)。

Arrays方法李提供了两个方法,一个是对int[]基本类型数组进行排序。一个是对Integer[]包装类型数组进行自定义排序。

int[]数组排序

在这里插入图片描述

Integer[]包装类自定义排序,这个方法主要用于自定义类的排序算法。

在这里插入图片描述

所以可以看出,Arrays.sort(arr, c);是对于包装类进行排序的,主要用于自定义排序。这也就是为什么Arrays有这么多的sort重载方法的原因。

在这里插入图片描述

 public static void main(String[] args) {

        int[] arr = {4, 6, 3, 9, 1, 5, 8};
        //Integer[] arr = {4, 6, 3, 9, 1, 5, 8};
        Mycomparator c = new Mycomparator();    // 实例化一个Comparator对象		//报错,必须转换为Integer对象数组。
        Arrays.sort(arr, c);
        
    }

对于自定义的类,你需要implements Comparable,重写compareTo方法

附,数组打印中 int[] 和Integer[]数组的区别

package lq;

import java.util.Arrays;

public class Solution {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String names[] = {"Georgianna", "Tenn", "Simon", "Tom"};
        System.out.println(Arrays.asList(names));
        System.out.println(Arrays.asList(new String[]{"Georgianna", "Tenn", "Simon", "Tom"}));
        System.out.println(Arrays.asList(new Integer[]{1, 2, 3}));
        System.out.println(Arrays.asList(new int[]{1, 2, 3}));
    }
}
/**
 * 输出:
 * [Georgianna, Tenn, Simon, Tom]
 * [Georgianna, Tenn, Simon, Tom]
 * [1, 2, 3]
 * [[I@1a62c31]
 */
众所周知 String[]数组是一个对象数组,里面存储的是一个个String对象,
static <T> List<T> asList(T... a) 
Returns a fixed-size list backed by the specified array. 
这个是asList方法的方法签名!接受的参数为可变参数!,这个可变参数,是一个个泛型T,而这个T就是String,或者Integer。
因为new Integer[]{1,2,3}是一个对象数组,里面存储了三个T,也就是三个Integer对象,所以asList()方法认为数组中有三个元素。
但new int[]{1,2,3}是基本类型的数组,asList(T... a) 方法将整个数组对象看成一个元素,也就是看成一个Integer对象,但是这个对象是一个数组!并没有将里面的元素当成一个元素。
所以第二个只打印出一个数组对象地址!
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值