【Java基础】实用工具类Arrays,让使用数组更轻松。

简介: 学习了解实用工具类Arrays,让使用数组更轻松。

Java实用工具类


java.util.Arrays类(操作数组)


1.boolean equals(int[],int[])

2.String toString(int[])

3.void fill(int[] a,int fromIndex,int toIndex,int val)

4.void sort(int[] a)

5.int binarySearch(int[] a,int key)

6.int[] copyOf(int[],int newLength)


java.util.Arrays类(操作数组)


使用前的准备:导包

import java.util.Arrays;


1.boolean equals(int[],int[])


boolean equals(int[],int[])方法:

可以用于判断两个数组是否相等,返回值是布尔类型(true或false)

案例:

import java.util.Arrays;
/**
 * @author .29.
 * @create 2022-09-11 11:34
 */
public class ArraysTool {
    public static void main(String[] args) {
        int[] arr1 = new int[]{1,2,3,4,5,6};
        int[] arr2 = new int[]{1,2,3,4,5,6};
        int[] arr3 = new int[]{1,4,3,2,5};
        int[] arr4 = arr1;
        int[] arr5 = new int[]{};
        int[] arr6 = new int[]{};
        //与相等数组比较
        boolean eql1 = Arrays.equals(arr1,arr2);
        //与不相等数组比较
        boolean eql2 = Arrays.equals(arr1,arr3);
        //数组与本身比较
        boolean eql3= Arrays.equals(arr1,arr4);
        //与空数组比较
        boolean eql4= Arrays.equals(arr1,arr5);
        //两个空数组比较
        boolean eql5= Arrays.equals(arr5,arr6);
        System.out.println("与相等数组比较:"+eql1);
        System.out.println("与不等数组比较:"+eql2);
        System.out.println("数组与本身比较:"+eql3);
        System.out.println("与空数组的比较:"+eql4);
        System.out.println("两个空数组比较:"+eql5);
    }
}

控制台输出:

微信图片_20221028215607.png

2.String toString(int[])


String toString(int[])方法,可以用来输出数组,将数组转化成字符串,返回值是String类型。

案例:

import java.util.Arrays;
/**
 * @author .29.
 * @create 2022-09-11 11:34
 */
public class ArraysTool {
    public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5,6};
        int[] arr1 = new int[]{};
        int[] arr2 = null;
        System.out.println(Arrays.toString(arr));
        System.out.println(Arrays.toString(arr1));
        System.out.println(Arrays.toString(arr2));
    }
}

控制台输出:

微信图片_20221028215617.png

3.void fill(int[] a,int fromIndex,int toIndex,int val)


void fill(int[] a,int fromIndex,int toIndex,int val) 方法,可以用来将指定的值填入到数组当中,没有返回值(返回值为空)。

注意:该方法用于填充覆盖原有的元素,不能用于增添元素,否则出现数组下标越界异常(java.lang.ArrayIndexOutOfBoundsException)


案例:

import java.util.Arrays;
/**
 * @author .29.
 * @create 2022-09-11 11:34
 */
public class ArraysTool {
    public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5,6};
        int a = 29;
        int b = 24;
        //(int[],int)不指定下标,完全填充
        Arrays.fill(arr,a);
        System.out.println(Arrays.toString(arr));
        //(int[],int fromIndex,int toIndex,int)指定下标
        // 从fromIndex到toIndex前的元素被填充
        Arrays.fill(arr,1,2,b);
        Arrays.fill(arr,4,6,24);
        //输出
        System.out.println(Arrays.toString(arr));
        //以下情况为不填充
        Arrays.fill(arr,1,1,b);
        Arrays.fill(arr,2,2,b);
        Arrays.fill(arr,3,3,b);
    }
}

控制台输出:

微信图片_20221028215625.png


4.void sort(int[] a)


void sort(int[] a)方法,可用来对数组进行排序,返回值为空(没有返回值)。

案例:

LeetCode原题链接:最小K个数

题目:面试题 17.14. 最小K个数

题目描述:设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。
示例:
输入: arr = [1,3,5,7,2,4,6,8], k = 4
输出: [1,2,3,4]

实现代码:

class Solution {
    public int[] smallestK(int[] arr, int k) {
        //开辟空间,用于存放最小k个数
        int[] nums = new int[k];
        //调用Arrays工具类的sort()方法,排序数组。
        Arrays.sort(arr);
        //将排序好数组的前k个数复制到开辟的空间中
        for(int i = 0;i < k; ++i){
            nums[i] = arr[i];
        }
        //返回
        return nums;
    }
}

提交结果:

微信图片_20221028215640.png


5.int binarySearch(int[] a,int key)


int binarySearch(int[] a,int key)方法,用于对排序好的数组进行二分法查找指定的值,返回查找到指定值的下标。

案例:

import java.util.Arrays;
/**
 * @author .29.
 * @create 2022-09-11 11:34
 */
public class ArraysTool {
    public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5,6,7,8};
        int a = Arrays.binarySearch(arr,1);
        int b = Arrays.binarySearch(arr,2);
        int c = Arrays.binarySearch(arr,3);
        int d = Arrays.binarySearch(arr,4);
        int e = Arrays.binarySearch(arr,5);
        int f = Arrays.binarySearch(arr,6);
        int g = Arrays.binarySearch(arr,7);
        int h = Arrays.binarySearch(arr,8);
        System.out.println(a+" "+b+" "+c+" "+d+" "+e+" "+f+" "+g+" "+h);
       //未排序
        int[] arr1 = {4,8,6,1,3,2,5,7};
        a = Arrays.binarySearch(arr1,1);
        b = Arrays.binarySearch(arr1,2);
        c = Arrays.binarySearch(arr1,3);
        d = Arrays.binarySearch(arr1,4);
        e = Arrays.binarySearch(arr1,5);
        f = Arrays.binarySearch(arr1,6);
        g = Arrays.binarySearch(arr1,7);
        h = Arrays.binarySearch(arr1,8);
        System.out.println(a+" "+b+" "+c+" "+d+" "+e+" "+f+" "+g+" "+h);
    }
}


控制台输出:

未排序数组使用binarySearch(int[] a,int key)方法效果不理想。

微信图片_20221028215650.png


6.int[] copyOf(int[],int newLength)


copyOf()方法用于复制一个数组,可以指定返回数组的长度。

案例(与sort()方法案例一致):

void sort(int[] a)方法,可用来对数组进行排序,返回值为空(没有返回值)。

案例:

LeetCode原题链接:最小K个数

题目:面试题 17.14. 最小K个数

题目描述:设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。
示例:
输入: arr = [1,3,5,7,2,4,6,8], k = 4
输出: [1,2,3,4]

实现代码:

class Solution {
    public int[] smallestK(int[] arr, int k) {
        //调用Arrays工具类的sort()方法,排序数组。
        Arrays.sort(arr);
       //将排序好的数组复制一份副本,指定副本长度为k
        int[] nums = Arrays.copyOf(arr,k);
        //返回
        return nums;
    }
}

题解结果:

微信图片_20221028215657.png

补充:如果返回数组的指定长度newLength长度大于被拷贝数组长度,多出来的位置会被0替代。

案例:

import java.util.Arrays;
/**
 * @author .29.
 * @create 2022-09-11 11:34
 */
public class ArraysTool {
    public static void main(String[] args) {
        int[] arr2 = {29,29,29,29,29};
      int[] ints = Arrays.copyOf(arr2, 10);
        System.out.println(Arrays.toString(ints));
    }
}

控制台输出:

微信图片_20221028215706.png

总结:熟练使用工具类,可以减少代码量,有效提升工作效率,但是不要因此而忽略巩固基础。

微信图片_20221028215712.jpg



目录
打赏
0
0
0
0
4
分享
相关文章
重学Java基础篇—Java类加载顺序深度解析
本文全面解析Java类的生命周期与加载顺序,涵盖从加载到卸载的七个阶段,并深入探讨初始化阶段的执行规则。通过单类、继承体系的实例分析,明确静态与实例初始化的顺序。同时,列举六种触发初始化的场景及特殊场景处理(如接口初始化)。提供类加载完整流程图与记忆口诀,助于理解复杂初始化逻辑。此外,针对空指针异常等问题提出排查方案,并给出最佳实践建议,帮助开发者优化程序设计、定位BUG及理解框架机制。最后扩展讲解类加载器层次与双亲委派机制,为深入研究奠定基础。
29 0
Java 中数组Array和列表List的转换
本文介绍了数组与列表之间的相互转换方法,主要包括三部分:1)使用`Collections.addAll()`方法将数组转为列表,适用于引用类型,效率较高;2)通过`new ArrayList&lt;&gt;()`构造器结合`Arrays.asList()`实现类似功能;3)利用JDK8的`Stream`流式计算,支持基本数据类型数组的转换。此外,还详细讲解了列表转数组的方法,如借助`Stream`实现不同类型数组间的转换,并附带代码示例与执行结果,帮助读者深入理解两种数据结构的互转技巧。
Java 中数组Array和列表List的转换
|
16天前
|
《从头开始学java,一天一个知识点》之:数组入门:一维数组的定义与遍历
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问&quot;`a==b`和`equals()`的区别&quot;,大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列就是为你打造的Java「速效救心丸」!我们承诺:每天1分钟,地铁通勤、午休间隙即可完成学习;直击痛点,只讲高频考点和实际开发中的「坑位」;拒绝臃肿,没有冗长概念堆砌,每篇都有可运行的代码标本。明日预告:《多维数组与常见操作》。 通过实例讲解数组的核心认知、趣味场景应用、企业级开发规范及优化技巧,帮助你快速掌握Java数组的精髓。
57 23
|
14天前
|
《从头开始学java,一天一个知识点》之:输入与输出:Scanner与System类
你是否也经历过这些崩溃瞬间?三天教程连`i++`和`++i`都说不清,面试时`a==b`与`equals()`区别大脑空白,代码总是莫名报NPE。这个系列就是为你打造的Java「速效救心丸」!每天1分钟,地铁通勤、午休间隙即可学习。直击高频考点和实际开发中的“坑位”,拒绝冗长概念,每篇都有可运行代码示例。涵盖输入输出基础、猜数字游戏、企业编码规范、性能优化技巧、隐藏技能等。助你快速掌握Java核心知识,提升编程能力。点赞、收藏、转发,助力更多小伙伴一起成长!
41 19
重学Java基础篇—类的生命周期深度解析
本文全面解析了Java类的生命周期,涵盖加载、验证、准备、解析、初始化、使用及卸载七个关键阶段。通过分阶段执行机制详解(如加载阶段的触发条件与技术实现),结合方法调用机制、内存回收保护等使用阶段特性,以及卸载条件和特殊场景处理,帮助开发者深入理解JVM运作原理。同时,文章探讨了性能优化建议、典型异常处理及新一代JVM特性(如元空间与模块化系统)。总结中强调安全优先、延迟加载与动态扩展的设计思想,并提供开发建议与进阶方向,助力解决性能调优、内存泄漏排查及框架设计等问题。
27 5
|
15天前
|
《从头开始学java,一天一个知识点》之:字符串处理:String类的核心API
🌱 **《字符串处理:String类的核心API》一分钟速通!** 本文快速介绍Java中String类的3个高频API:`substring`、`indexOf`和`split`,并通过代码示例展示其用法。重点提示:`substring`的结束索引不包含该位置,`split`支持正则表达式。进一步探讨了String不可变性的高效设计原理及企业级编码规范,如避免使用`new String()`、拼接时使用`StringBuilder`等。最后通过互动解密游戏帮助读者巩固知识。 (上一篇:《多维数组与常见操作》 | 下一篇预告:《输入与输出:Scanner与System类》)
44 11
|
8天前
|
重学Java基础篇—Java Object类常用方法深度解析
Java中,Object类作为所有类的超类,提供了多个核心方法以支持对象的基本行为。其中,`toString()`用于对象的字符串表示,重写时应包含关键信息;`equals()`与`hashCode()`需成对重写,确保对象等价判断的一致性;`getClass()`用于运行时类型识别;`clone()`实现对象复制,需区分浅拷贝与深拷贝;`wait()/notify()`支持线程协作。此外,`finalize()`已过时,建议使用更安全的资源管理方式。合理运用这些方法,并遵循最佳实践,可提升代码质量与健壮性。
20 1
Java 复制数组
本文介绍了Java中数组的基础知识与常用操作,包括数组的概念、创建、访问元素、遍历、复制、排序和搜索等方法。同时详细讲解了数组的五种赋值方式,并通过代码示例演示了求总和平均值、最大最小值、升序降序排序及Arrays类的常用方法。内容深入浅出,适合初学者学习掌握Java数组的核心功能与应用场景。
课时37:综合实战:数据表与简单Java类映射转换
今天我分享的是数据表与简单 Java 类映射转换,主要分为以下四部分。 1. 映射关系基础 2. 映射步骤方法 3. 项目对象配置 4. 数据获取与调试
java常见的集合类有哪些
Map接口和Collection接口是所有集合框架的父接口: 1. Collection接口的子接口包括:Set接口和List接口 2. Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及 Properties等 3. Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet等 4. List接口的实现类主要有:ArrayList、LinkedList、Stack以及Vector等
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等