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());
    }
}
相关推荐
软件技术NINI17 分钟前
基于SpringBoot和Vue的新能源汽车销售推荐系统
java·vue.js·spring boot·后端·汽车·毕业设计·毕设
Flynn Liang1 小时前
LangChain4j 生产级工程骨架:12 个模块 + Docker 一键启动
java·spring boot·langchain·rag·langchain4j
噢,我明白了2 小时前
JAVA中的一些基础应用知识点
java·开发语言
SL_staff2 小时前
私有化低代码不是妥协,而是企业级数字化的自主可控主航道
java
装不满的克莱因瓶3 小时前
【SpringAI Alibaba】ReactAgent结构化输出OutputType与OutputSchema实战
java·人工智能·ai·springai·springaialibaba
秋天的怀念_David3 小时前
算法一千零一夜 · 第二十八夜 注册
java·程序人生·算法
Java码农也是农3 小时前
Spring 事务详解:@Transactional 如何生效、何时回滚、传播行为怎么选
java·spring boot·spring·事务
学长毕设4 小时前
基于SpringBoot的游乐园管理系统-附源码
java·spring boot·后端
SimonKing4 小时前
震惊:怎么回事,opencode一轮对话耗尽免费额度
java·后端·程序员
装不满的克莱因瓶4 小时前
【SpringAI Alibaba】ReactAgent响应SSE实时流式传输案例实战
java·人工智能·ai·sse·springai