Bootstrap

JAVA一维数组

目录

一维数组定义格式

一维数组的使用

一维数组的遍历

一维数组的赋值

一维数组的打印

数组的拷贝

一维数组二分查找

Array.equals

Array.fill


一维数组定义格式

        int[] array1 = {1,2,3,4};//整型数组 下标从0开始

        int[] array2 = new int[10];//定义了一个大小为10的整型数组  10个0

        int[] array3 = new int[]{1,2,3,4,5,6,7};//可简写成1的形式

数组是相同类型元素的集合,在内存上是一块连续的空间。

下面我们来输出这些数组看看里面存的是什么。

        System.out.println(array1);//[I@1b6d3586
        System.out.println(array2);//[I@4554617c
        System.out.println(array3);//[I@74a14482

 你可以将  [I@74a14482  理解为地址,实际上这不是真实的地址,而是一个哈希值。数组是引用变量,也就是存储“地址”的变量。

这只是一个草图,希望可以帮助你理解一维数组。

 还可以这样定义

        int[] array4;
        array4 = new int[10];

        int[] array5;
        array5 = new int[]{1,2,3,4,5};

注意:以下的定义格式是不被java允许的。

        int array6;
        array6 = {1,2,3,4,5,6};不允许这样写

上面我们只是定义了int类型的一维数组,当然也可以定义其他格式。

        char[] array = new char[10];//十个空

        double[] array2 = new double[10];//十个0.0

        boolean[] array3 = new boolean[10];//十个false

        String[] array4 = new String[10];//十个null

一维数组的使用

        int[] array1 = {1,2,3,4};
        System.out.println(array1[0]);
        System.out.println(array1[1]);
        System.out.println(array1[2]);
        System.out.println(array1[3]);

要注意数组下标是从0开始的,通过上面的代码,可以分别输出array1[0] , array1[1] , array1[2] , array1[3] 的值  1、2、3、4。

如果我们输出array1[4]会出现什么结果呢?

        System.out.println(array1[4]);

这种错误叫做数组越界异常 。因此我们在使用一维数组是,一定要注意下标的范围。

一维数组的遍历

第一种方法,我们可以通过for循环   注意:数组长度可以通过  数组名.length获得

        System.out.println(array1.length);//array1的长度
        //打印数组方法
        for (int i = 0; i < array1.length; i++) {
            System.out.print(array1[i]+" ");
        }
        System.out.println();//换行

第二种方法,我们可以通过foreach  foreach循环拿不到array1的下标,他只是将array1[]的值依次存到int x中并输出。这是他和for循环的本质区别。

        //foreach循环  数组元素存入哪里:数组名称        
        for (int x: array1) {
            System.out.print(x+" ");
        }
        System.out.println();

一维数组的赋值

下面我们再定义一个一维数组array2,将array1的值赋给array2

        int[] array2 = array1;

如果我们通过array2改变其中一个值,会对array1产生影响吗?如果是基本数据类型,答案一定是不会,但数组是引用型数据类型,答案又是什么呢?

        array2[0] = 99;
        System.out.println(array1[0]);

输出结果是 99 。你可以在你的电脑上试验一下。由此我们可以知道,array1和array2这两个引用同时指向了一个对象 。那么问题来了,引用可以指向引用吗? 答案是不可以!!array2这个引用指向了array1这个引用所指向的对象 。因为array1和array2指向同一个对象,所以通过array2修改对象的值时,array1使用的是修改之后的值 。

画个草图帮助你来理解。

如果你定义了一个一维数组,里面暂时不存数据的话,你可以给一维数组赋值为null,但是我们不建议这样写。

        //int[] array3 = 0; error
        int[] array3 = null;
        //代表array3这个引用不指向任何对象
        System.out.println(array3.length);//空指针异常

你不可以直接赋值为0,这是不允许的,一定要赋值为null 。

一维数组的打印

借助工具类 将数组转化成字符串输出。

        String s = Arrays.toString(array1);
        System.out.println(s);
        System.out.println(Arrays.toString(array1));

数组的拷贝

第一种方法:for循环赋值

        int[] copy1 = new int[array1.length];//[]中允许是变量
        for (int i = 0; i < array1.length; i++) {
            copy1[i] = array1[i];
        }
        System.out.println(Arrays.toString(copy1));

第二种方法:使用Array.copyof(源数组,要拷贝的长度)

        int[] copy2 = Arrays.copyOf(array1,array1.length);
        System.out.println(Arrays.toString(copy2));

用这种方法可以给数组扩容

        int[] copy3 = Arrays.copyOf(array1,array1.length*2);
        System.out.println(Arrays.toString(copy3));//[1, 2, 3, 4, 0, 0, 0, 0]

第三种方法:使用Array.copyOfRange(源数组,拷贝的起始位置,拷贝的结束位置) ,在java中范围一般是左闭右开[1,3) ,如果范围超过数组长度,能拷贝多少拷贝多少。

        int[] copy4 = Arrays.copyOfRange(array1,1,3);
        System.out.println(Arrays.toString(copy4));

第四种方法:System.arraycopy(源数组 源数组开始拷贝的位置 目的数组 目的数组的哪个位置 拷贝的长度)

        int[] copy5 = new int[array1.length];
        System.arraycopy(array1,0,copy5,0,array1.length);
        System.out.println(Arrays.toString(copy5));

判断以下方法是否为数组的拷贝

        int[] array2 = {1,2,3,4,5};
        int[] array3 = array2;
        System.out.println(Arrays.toString(array3));

回答:不是,数组数据在内存上还是一份。

一维数组二分查找

在java中,你可以自己编写二分查找的方法,当然java也给你提供了这个方法 binarySearch

        System.out.println(Arrays.binarySearch(array1, 10));

Array.equals

用于比较2个数组对应位置的数据是否一样

        int[] array3 = {1,5,6,7,9,10};
        int[] array4 = {1,5,6,7,9,10};
        boolean flag = Arrays.equals(array3,array4);
        System.out.println(flag);


​​​​​​​Array.fill

用于填充数据

        int[] array5 = new int[10];
        Arrays.fill(array5,-1);//把array5中的数据全部填充成-1
        System.out.println(Arrays.toString(array5));//[-1, -1, -1, -1, -1, -1, -1, -1, -1, 
                                                    //-1]
        Arrays.fill(array5,1,4,2);//从[1,4)填充成2
        System.out.println(Arrays.toString(array5));//[-1, 2, 2, 2, -1, -1, -1, -1, -1, -1]

以上是一维数组的介绍,希望对你有帮助。

;