6.数组工具类

java.util.Arrays 是 Java 提供的数组工具类,里面全是静态方法,用来方便地操作数组。

常用方法

分类 方法 说明
打印 Arrays.toString(arr) 一维数组转字符串
Arrays.deepToString(arr) 多维数组转字符串
排序 Arrays.sort(arr) 升序排序
Arrays.sort(arr, from, to) 对 [from, to) 部分排序
Arrays.sort(objArr, comparator) 对象数组自定义排序
Arrays.parallelSort(arr) 并行排序,大数组可能更快
查找 Arrays.binarySearch(arr, key) 二分查找,必须先排序
比较 Arrays.equals(a, b) 一维数组内容是否相等
Arrays.deepEquals(a, b) 多维数组内容是否相等
Arrays.compare(a, b) 按字典序比较,Java 9+
Arrays.mismatch(a, b) 返回第一个不匹配位置,Java 9+
填充 Arrays.fill(arr, value) 全部填充
Arrays.fill(arr, from, to, value) 部分填充
复制 Arrays.copyOf(arr, newLength) 复制并指定新长度
Arrays.copyOfRange(arr, from, to) 复制区间
转 List Arrays.asList(...) 转成固定大小 List
流 Arrays.stream(arr) 转成 Stream
生成 Arrays.setAll(arr, i -> ...) 按索引生成元素
哈希 Arrays.hashCode(arr) / deepHashCode 计算内容哈希
java 复制代码
public class Array_ {
    public static void main(String[] args) {
        //toString方法
        Integer integer[] = {1, 20, 30};
        System.out.println(Arrays.toString(integer));
        //sort方法 排序
        Integer i1[] = {1, 33, 20, -1, 80, 30};
        //sort方法 正序排序
        //由于数组是引用类型,参数的方法里面对数组的更改直接影响到自身。
        Arrays.sort(i1);
        System.out.println(Arrays.toString(i1));
        //sort方法 降序排序
        /**
         * 1. sort方法需要降序排序,需要传递一个对象,该对象是通过匿名类创建的。这个匿名类实现了Comparator接口。
         * 2. 这里体现了接口编程的好处:接口编程 + 动态绑定 + 匿名类综合使用
         * 3. 通过debug源码分析最终执行这块代码决定了排序顺序:
         *  // Find end of run, and reverse range if descending
         *         if (c.compare(a[runHi++], a[lo]) < 0) { // Descending
         *             while (runHi < hi && c.compare(a[runHi], a[runHi - 1]) < 0)
         *                 runHi++;
         *             reverseRange(a, lo, runHi);
         *         } else {                              // Ascending
         *             while (runHi < hi && c.compare(a[runHi], a[runHi - 1]) >= 0)
         *                 runHi++;
         *         }
         */
        Arrays.sort(i1, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                Integer o11 = (Integer) o1;
                Integer o21 = (Integer) o2;
                return o21 - o11;
            }
        });
        System.out.println(Arrays.toString(i1));

        //binarySearch 给定值,通过二分法查找数组中对那个的键。不存在返回-(low + 1) low 表示存在的位置
        //使用binarySearch前,必须数组必须是有序的(从小到大或者从大到小)
        System.out.println(Arrays.binarySearch(i1, 1));

       //copyOf方法 数组元素的复制 底层调用的是System.arraycopy()方法
        //1.从数组arr中的第0位置依次拷贝newLength个元素到newArr中。
        //2.如果newLength参数大于arr.length,在数组后边添加null元素,
        //3.newLength小于0,会抛出异常。
        Integer[] arr = {1, 33, 20, -1, 80, 30};
        Integer[] newArr = Arrays.copyOf(arr, arr.length + 3);
        System.out.println(Arrays.toString(newArr));

        //fill方法 数组填充
        //使用99替换原来num数组中所有的元素
        Integer[] num = {1, 8, 6, 20, 5};
        Arrays.fill(num, 99);
        System.out.println(Arrays.toString(num));

        //equals方法 比较两个数组的内容是否完全一致(每一个元素都作比较)
        Integer[] arr1 = {1, 8, 6, 20, 5};
        Integer[] arr2 = {1, 8, 6, 20, 5};
        System.out.println(Arrays.equals(arr1, arr2));

        //asList方法 将一组值转换成 list类型
        //asList的编译类型是接口。
        //asList的运行类型是:class java.util.Arrays$ArrayList
        // 意思是class java.util.Arrays类中的一个静态内部类
        List asList = Arrays.asList(1, 3, 5, 6, 34, 53, 0, 90);
        System.out.println("asList = "+ asList);
        System.out.println("asList run type is:"+asList.getClass());
    }
}
相关推荐
hai_android1 小时前
Android 设备锁定:Kiosk Mode 实战
android·java·android jetpack
张伯毅1 小时前
External Shuffle Service(spark3_shuffle):原理、配置与排障
java·开发语言·spark·yarn
high一马平川2 小时前
# SystemUI Dagger2 精读 · 第 2 章 @Inject:1200 处构造注入,和 1 处例外
android·java·kotlin
小陈从不会敲代码2 小时前
JavaEE面试复习(多线程-初阶)
java·面试·java-ee
周厉2 小时前
酒店PMS系统设计:房型房价管理与动态价格优先级实现(Java/MySQL)
java·数据库·pms酒店系统
一碗白开水一2 小时前
Day 5 · 弹性 | 微观
java·前端·数据库
迪飞特科技2 小时前
大模型接入业务系统:API、本地部署、RAG、智能体四种路线怎么选
java·数据库·人工智能·知识图谱·deepseek·本地化大模型
vipxieliang2 小时前
ValidX 验证器缓存机制:如何提升验证性能
java·spring boot
未秃头的程序猿2 小时前
Spring Cloud Gateway 做统一加解密,我在请求体上栽了三天
java·后端·架构