首页 > 编程语言 >java数组之数组工具类——Arrays的使用

java数组之数组工具类——Arrays的使用

时间:2024-07-19 20:26:52浏览次数:19  
标签:arr java Arrays void Object int static 数组

一、Arrays工具类简述

        在java的类库中有许多现成的已经封装好的方法,可以供开发人员使用,比如我们之前学的二分法查找或者快速排序等。所以在实际的开发中,我们是不用自己编写这些常用的方法的。那么在常用的数组方法在哪里的?java作为面向对象的语言,所有方法都会封装到一个类中,而操作数组的方法就被封装到一个称为Arrays的工具类中,即java.util.Arrays。

二、Arrays工具类的使用

1.使用方法

        我们需要借助javaAPI文档来查看Arrays工具类中有哪些方法,要怎么使用这些方法。API在线文档的连接如下:

Overview (Java SE 17 & JDK 17)module indexicon-default.png?t=N7T8https://docs.oracle.com/en/java/javase/17/docs/api/index.html

2.Arrays类中常用方法汇总

a)数组元素拼接

①static String toString(int[] a):将int类型的数组a中的元素以形式[元素1, 元素2, 元素3...]打印出来。(注意:有其他参数类型的toString方法,比如double,char等。以下方法均是如此)

②tatic String toString(Object[] a):字符串表示形式由数组的元素列表组成,括在方括号("[]")中。相邻元素用字符 ", "(逗号加空格)分隔。元素将自动调用自己从Object继承的toString方法将对象转为字符串进行拼接,如果没有重写,则返回类型@hash值,如果重写则按重写返回的字符串进行拼接。

b)数组排序

①static void sort(int[] a) :将a数组按照从小到大进行排序
②static void sort(int[] a, int fromIndex, int toIndex) :将a数组的[fromIndex, toIndex)部分按照升序排列
③static void sort(Object[] a) :根据元素的自然顺序对指定对象数组按升序进行排序。
④static <T> void sort(T[] a, Comparator<? super T> c) :根据指定比较器产生的顺序对指定对象数组进行排序。

c)二分查找

①static int binarySearch(int[] a, int key) 、static int binarySearch(Object[] a, Object key) :要求数组有序,在数组中查找key是否存在,如果存在返回第一次找到的下标,不存在返回负数。

d)数组的复制

①static int[] copyOf(int[] original, int newLength)  :根据original原数组复制一个长度为newLength的新数组,并返回新数组
②static <T> T[] copyOf(T[] original,int newLength):根据original原数组复制一个长度为newLength的新数组,并返回新数组
③static int[] copyOfRange(int[] original, int from, int to) :复制original原数组的[from,to)构成新数组,并返回新数组
④static <T> T[] copyOfRange(T[] original,int from,int to):复制original原数组的[from,to)构成新数组,并返回新数组

e)比较两个数组是否相等

①static boolean equals(int[] a, int[] a2) :比较两个数组的长度、元素是否完全相同
②static boolean equals(Object[] a,Object[] a2):比较两个数组的长度、元素是否完全相同

f)填充数组

①static void fill(int[] a, int val) :用val值填充整个a数组
②static void fill(Object[] a,Object val):用val对象填充整个a数组
③static void fill(int[] a, int fromIndex, int toIndex, int val):将a数组[fromIndex,toIndex)部分填充为val值
④static void fill(Object[] a, int fromIndex, int toIndex, Object val) :将a数组[fromIndex,toIndex)部分填充为val对象

三、数组中的常见异常

1.数组角标越界异常

        当访问数组元素时,下标指定超出[0, 数组名.length-1]的范围时,就会报数组下标越界异常:ArrayIndexOutOfBoundsException。

public class TestArrayIndexOutOfBoundsException {
    public static void main(String[] args) {
        int[] arr = {1,2,3};
       // System.out.println("最后一个元素:" + arr[3]);//错误,下标越界
      //  System.out.println("最后一个元素:" + arr[arr.length]);//错误,下标越界
        System.out.println("最后一个元素:" + arr[arr.length-1]);//对
    }
}

分析:创建数组,赋值3个元素,数组的索引就是0,1,2,没有3索引,因此我们不能访问数组中不存在的索引,程序运行后,将会抛出 ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。

2.空指针异常

观察以下代码,运行后会出现什么结果。

public class TestNullPointerException {
    public static void main(String[] args) {
        //定义数组
        int[][] arr = new int[3][];

        System.out.println(arr[0][0]);//NullPointerException
    }
}

因为此时数组的每一行还未分配具体存储元素的空间,此时arr[0]是null,此时访问arr[0][0]会抛出NullPointerException 空指针异常。

空指针异常在内存图中的表现

 小结:空指针异常情况

        //举例一:
//        int[] arr1 = new int[10];
//        arr1 = null;
//        System.out.println(arr1[9]);
        
        //举例二:
//        int[][] arr2 = new int[5][];
//        //arr2[3] = new int[10];
//        System.out.println(arr2[3][3]);//输出0
        
        //举例三:
        String[] arr3 = new String[10];
        System.out.println(arr3[2].toString());

标签:arr,java,Arrays,void,Object,int,static,数组
From: https://blog.csdn.net/weixin_44554794/article/details/140415368

相关文章

  • 花几千上万学习Java,真没必要!(十四)
    方法:测试代码1:不带参数,不带返回值的方法packagetestmethod.com;publicclassTestClassMethod{//定义一个不带参数且不带返回值的方法publicstaticvoidmyMethod(){//在这里编写方法体System.out.println("Thisismymethod");}......
  • JavaScript实现通过按纽控制电梯上下移动,并实现帧频动画
    varapp=newPIXI.Application(520,460);document.body.appendChild(app.view);//创建背景varbg=newPIXI.Sprite.fromImage("res/lianxi/elevator/bg.png");app.stage.addChild(bg);varelevator=newPIXI.Sprite.fromImage("res/lianxi/elevator/dt......
  • javaScrip的学习(一)
    目录引言一、java和JavaScript的联系二、js中的弹出框1.alert弹出框2.confirm带确认取消的按钮弹框3.prompt带有提示信息且带有输入框的弹框 4.输出到网页中​三、js引入方式1.放在script标签中2.放在外部js文件中四、执行顺序五、书写规范1.语句结尾加分号......
  • Java面试题(企业真题)
    01.泛型的理解泛型是Java5引入的一种特性,它允许程序员在定义类、接口或方法时指定一个或多个类型参数,从而可以在运行时处理各种不同的数据类型,同时保持类型安全。泛型提供了编译时类型检查,消除了强制类型转换的需要,减少了运行时ClassCastException异常的可能性。02.泛型......
  • C语言_数组(1)
    一、一维数组1、数组的创建方式:数组是有限个相同类型数据元素的集合。type_t arr_name [const_n];//type_t是指数组的元素类型//const_n是一个常量表达式,用来指定数组的大小创建例子:注意:数组在创建时,[]里的必须是常量。但是如果编译器支持C99标准的话可以使用......
  • JAVA小白学习日记Day6
    1.List集合:把具有相同属性的东西放在一起,也可以是容器,把有关的东西都放进去。List:List是位于java.util下的一个接口,有序集合(也称为序列)。此界面的用户可以精确控制每个元素在列表中的插入位置。用户可以通过整数索引(列表中的位置)访问元素,并在列表中搜索元素。之前学过的容器......
  • [Java基础]Class对象
    Class类[class对象通常存放在方法区]在程序运行期间,Java运行时系统始终为所有对象维护一个运行时类型标识。这个信息会跟踪每个对象所属的类。虚拟机利用运行时类型信息选择要执行的正确的方法。不过,可以使用一个特殊的Java类访问这些信息。保存这些信息的类名为Class,这个名字......
  • java基础学习:序列化之 - kryo
    文章目录一、介绍二、特点三、使用方式四、应用场景五、注意事项一、介绍Kryo是一个快速且高效的Java序列化框架,它主要用于将Java对象转换为字节流以便存储或传输,同时能够将字节流反序列化为原始Java对象。Kryo相比Java自带的序列化机制具有更高的性能和更小的序列化......
  • java基础学习:序列化之 - ObjectMapper
    文章目录一、介绍二、主要功能三、使用方法官网:一、介绍ObjectMapper是Jackson库中的一个核心类,用于在Java对象和JSON数据之间进行转换。Jackson是一个流行的Java库,用于处理JSON数据。它提供了灵活的方式来序列化和反序列化Java对象,即将Java对象转换......
  • 对JAVA的HashMap的深入理解
    今天我们来从源码层面分析JAVA的HashMap底层实现原理,我们还是先从HashMap的构造方法来分析。我们发现HashMap有四个构造方法,首先还是来分析它的无参构造方法,源码如下:这个方法比较简单定义了一个数据成员loadFactor的值,设置为0.75。我们再来看第二个方法HashMap(int)发......