Arrays 类

Arrays 里包含了一系列的静态方法,用于管理或操作数组(比如排序和搜索)。

常用方法

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        // toString 方法,把数组元素转换成字符串
        int arr1[] = {2, 5, 6};
        System.out.println(Arrays.toString(arr1));

        // sort 方法,排序
        int arr2[] = {1, -2, 5, 7, 4, 10};
        // 因为数组是引用类型,所以通过 sort 方法排序后,会直接影响到数组本身
        Arrays.sort(arr2); // 默认升序排序
        System.out.println(Arrays.toString(arr2));

        Integer arr3[] = {1, -2, 5, 7, 4, 10};
        /**
         * sort 是重载的,可以通过传入一个接口 Comparator 实现自定义排序
         * 自定义排序时,传入两个参数:待排序的数组和实现 Comparator 接口的匿名内部类
         * 该接口要求实现 compare 方法,体现了接口编程的方式,具体可以通过debug看源码
         */
        Arrays.sort(arr3, new Comparator() {
            public int compare(Object o1, Object o2){
                Integer i1 = (Integer)o1;
                Integer i2 = (Integer)o2;
                
                // return i1 - i2; // 升序排序
                return i2 - i1; // 降序排序
            }
        });
        System.out.println(Arrays.toString(arr3));

        int arr4[] = {1, -2, 5, 7, 4, 10};
        // 以冒泡排序为例,采用 Comparator 接口实现自定义排序
        bubble(arr4, new Comparator() {
            @Override
            public int compare(Object o1, Object o2){
                int i1 = (Integer)o1;
                int i2 = (Integer)o2;

                // 调用 compare 方法返回一个数,用于判断排序的标准(升序还是降序)
                return i1 - i2;
            }
        });
        System.out.println(Arrays.toString(arr4));

        // binarySearch 方法,通过二分搜索法进行查找,要求必须排好序
        Integer arr5[] = {1, 2, 12, 14, 15, 47, 99}; //  要求数组是有序的(可升序或者降序)
        // 找到返回元素的索引,
        // 通过看源码,如果找不到元素,则返回 -(low + 1)
        // low 表示所查找的元素如果在数组中时,它的索引
        // 比如查找 3, 3不存在,如果3在数组中,则它的索引是2,即 low = 2,所以会返回-3 
        int index = Arrays.binarySearch(arr5, 14);
        System.out.println(index); // 3
        System.out.println(Arrays.binarySearch(arr5, 3)); // -3

        // copyOf 数组元素的复制
        // 从 arr5 数组中,复制 arr5.length 个元素放在 arr6 中
        // 如果第二个参数大于 arr5 数组的长度,则多出的部分会用 null 填充
        // 如果第二个参数小于0,则会抛出异常
        Integer arr6[] = Arrays.copyOf(arr5, arr5.length);
        System.out.println(Arrays.toString(arr6));

        // fill 数组元素的填充
        Integer arr7[] = {1, 2, 3};
        // 用 99 替换掉数组中的所有元素
        Arrays.fill(arr7, 99);
        System.out.println(Arrays.toString(arr7)); // [99, 99, 99]

        // equals 比较两个数组元素内容是否一致
        Integer arr8[] = {99, 99, 99};
        System.out.println(Arrays.equals(arr7, arr8)); // true

        // asList 将一组值,转换成 List , 即将数组转换成集合
        List asList = Arrays.asList(arr8);
        System.out.println(asList); // [99, 99, 99]
        // 输出:asList 的运行类型:class java.util.Arrays$ArrayList
        System.out.println("asList 的运行类型:" + asList.getClass());
    }


    // 以冒泡排序为例,采用 Comparator 接口实现自定义排序
    public static void bubble(int[] arr, Comparator c) {
        int t = 0;

        for(int i = 0; i < arr.length - 1; i++){
            for(int j = 0; j < arr.length - 1 - i; j++){
                // if(arr[j] > arr[j+1]){ // 按升序还是降序由此语句判断
                // 现在采用 Comparator 接口可以实现自定义排序,即由用户决定是升序还是降序
                // 而不是写死
                // c.compare(arr[j], arr[j+1]) 方法的返回值决定了排序是升序还是降序
                if(c.compare(arr[j], arr[j+1]) > 0){
                    t = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = t;
                }
            }
        }
    } 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值