Java基础篇_数组

目录

一、数组

1.1 数组的概念

1.2 数组的初始化

1.3 数组的使用

1.3.1 数组的访问

1.3.2 数组的遍历

二、有关数组操作的方法

2.1 数组转字符串

2.2 数组的拷贝

2.3 数组的排序

三、二维数组

3.1 二维数组的初始化

3.2 二维数组的遍历

 总结


一、数组

1.1 数组的概念

数组可以看成是相同类型元素的一个集合,在内存中是一段连续的空间,每个空间都有自己的编号,起始位置的编号是0,即数组的下标。

1.2 数组的初始化

数组的初始化主要分为动态初始化以及静态初始化。如果没有对数组进行初始化,数组中元素有默认值,默认值为基类类型对应的默认值,例如:int[]的默认值为0。

动态初始化:在创建数组时,直接指定数组中元素的个数。

int[] array = new int[5];//默认初始化为0

静态初始化:在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定。 

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

简而言之,动态初始化指定长度,静态初始化指定内容。

1.3 数组的使用

1.3.1 数组的访问

由于数组在内存中是一段连续的空间,空间的编号(数组的下标)都是从0开始的,依次递增,所以数组支持随机访问,即可以通过下标快速访问数组中任意位置的元素。

例如,访问array数组中的下标为0的元素10,代码如下:

public static void main(String[] args) {
    int[] array = new int[]{10, 20, 30};
    System.out.println(array[0]);//输出为 10
}

1.3.2 数组的遍历

遍历是指将数组中的所有元素都访问一遍, 访问是指对数组中的元素进行某种操作。

例如,通过循环打印,代码如下:

public static void main(String[] args) {
    int[] array = {1,2,3,4,5};
    for (int i = 0; i < array.length; i++) {
        System.out.print(array[i] + " ");//输出为 1 2 3 4 5 
    }
}

注:在数组中可以通过数组对象.length来获取数组的长度。

同时,也可以使用 for-each 遍历数组,例如:

public static void main(String[] args) {
    int[] array = {1,2,3,4,5};
    for (int x : array) {
        System.out.print(x + " ");//输出为 1 2 3 4 5 
    }
}

注:for-each 循环括号中 x 是与数组元素对应的数据类型所定义的变量,array 为数组名,其原理是将 array 中元素都放入 x,再进行输出即可。

二者的区别:普通for循环可获取数组元素下标,for-each循环则无法获得。


二、有关数组操作的方法

2.1 数组转字符串

上文中提到了两种遍历输出,当然,还有最为方便的一种输出,利用操作数组的工具类 Arrays 中的 toString 方法,该方法是将数组转化为字符串进行输出,例如:

import java.util.Arrays;

public static void main(String[] args) {
    int[] array = {1,2,3,4,5};
    String x = Arrays.toString(array);
    System.out.println(x);//输出为 [1, 2, 3, 4, 5]
}

既然我们可以使用toString方法让数组更方便地输出,那我们也可以尝试自行实现 Arrays.toString方法,代码如下:

public static void main(String[] args) {
        int[] array = {1,2,3,4,5};
        String arr = myToString(array);
        System.out.println(arr);//输出为 [1,2,3,4,5]
    }

public static String myToString(int[] array) {
        //若数组初始值为null,则会显示空指针异常
        if (array == null) {
            return "null";
        }

        String arr = "[";
        for (int i = 0; i < array.length; i++) {
            arr += array[i];
            if (i != array.length-1) {
                arr += ",";
            }
        }
        arr += "]";
        return arr;
    }

2.2 数组的拷贝

数组的拷贝同样是对数组进行操作,那我们也同样可以使用 Arrays 中的 copyOf 方法,copyOf 方法在进行数组拷贝时,创建了一个新的数组,例如:

public static void main(String[] args) {
        int[] array = {1,2,3,4,5};

        //拷贝 array 这个数组,长度为 array.length
        int[] copy = Arrays.copyOf(array, array.length);

        System.out.println(Arrays.toString(copy));//输出为 [1, 2, 3, 4, 5]
    }

Arrays.copyOf 方法还能对数组长度进行扩容,例如:

public static void main(String[] args) {
        int[] array = {1,2,3,4,5};

        //拷贝 array 这个数组,长度为 array.length*2
        array = Arrays.copyOf(array, array.length*2);
        //array 指向了新的数组空间,长度扩大为原来的 2 倍
        System.out.println(Arrays.toString(array));//输出为 [1, 2, 3, 4, 5, 0, 0, 0, 0, 0]

    }

我们还可以利用 Array.copyOfRange 方法对数组进行局部拷贝,需要注意的是,局部拷贝中下标的范围区间采用的是左闭右开,例如:

public static void main(String[] args) {
        int[] array = {1,2,3,4,5};
        //拷贝 array 数组中区间为 [1,3)的元素
        int[] copy = Arrays.copyOfRange(array,1,3);

        System.out.println(Arrays.toString(copy));//输出 [2, 3]
    }

还有最为灵活的 System.arraycopy 方法,可以从源数组的某个位置的元素拷贝到另一个数组的某一个位置,例如:

public static void main(String[] args) {
        int[] array = {1,2,3,4,5};
        int[] copy = new int[array.length];
        //(源数组,拷贝起始下标,目的数组,目的下标,拷贝长度)
        System.arraycopy(array,0,copy,0,array.length);

        System.out.println(Arrays.toString(copy));//输出为 [1, 2, 3, 4, 5]
    }

2.3 数组的排序

我们可以利用 Arrays.sort 方法将数组中的乱序元素变为有序元素,例如:

public static void main(String[] args) {
        int[] array = {1,0,0,8,6};
        
        Arrays.sort(array);
        
        System.out.println(Arrays.toString(array));//输出为 [0, 0, 1, 6, 8]
    }

三、二维数组

3.1 二维数组的初始化

二维数组本质上也是一维数组,只不过每个元素又是一个一维数组,所以二维数组的初始化与一维数组类似,例如:

//两行三列数组
int[][] array1 = {{1, 2, 3}, {4, 5, 6}};
int[][] array2 = new int[][]{{1,2,3},{4,5,6}};
int[][] array3 = new int[2][3];//默认初始化为0

注:Java中二维数组的定义可以省略列

3.2 二维数组的遍历

二维数组中元素的个数是行数,即 array.length列数为每个元素中的元素个数,即 array[i].length,遍历二维数组代码如下:

public static void main(String[] args) {
        int[][] array = {{1, 2, 3}, {4, 5, 6}};

        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j] + " ");//输出为 1 2 3 
                                                    //      4 5 6
            }
            System.out.println();
        }
    }

利用 for-each 遍历时,若只使用一次 for-each,获得的只是二维数组中元素的地址,所以需要两层 for-each 来遍历二维数组元素中的元素,例如:

public static void main(String[] args) {
        int[][] array = {{1, 2, 3}, {4, 5, 6}};

        for (int[] x : array) {
            for (int y : x) {
                System.out.print(y + " ");// 1 2 3 
                                          //4 5 6
            }
            System.out.println();
        }
    }

与 for-each 同理,普通的 Arrays.toString 无法获得二维数组深层元素,所以我们需要使用Arrays.deepToString 方法来输出二维数组,例如:

public static void main(String[] args) {
        int[][] array = {{1, 2, 3}, {4, 5, 6}};

        String ret = Arrays.deepToString(array);

        System.out.println(ret);//输出为 [[1, 2, 3], [4, 5, 6]]
    }

 总结

1、在数组中可以通过数组对象.length来获取数组的长度。

2、可以使用 Arrays.toString 方法将数组转为字符串输出。

3、利用 Arrays.copyOf 方法可以对数组进行拷贝或长度的扩容。

4、Arrays.sort方法可以将数组元素快速有序排列。

5、Java中二维数组的定义可以省略列。

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值