【Java】十分钟让你掌握数组的重点部分

目录

1.数组的初始化

1.1 动态初始化

1.2 静态初始化

2. 数组遍历的方法

使用 for-each 遍历数组

3. 数组转字符串

4. 理解数组是一种引用数据类型

4.1 引用类型

4.2 空引用 null

5.数组的应用场景

作为函数的参数

6.二维数组

6.1 理解二维数组是特殊的一维数组

6.2 理解不规则数组


1.数组的初始化

数组的初始化主要分为动态初始化以及静态初始化
 

1.动态初始化

在创建数组时,直接指定数组中元素的个数

int[] array = new int[5];

1.2 静态初始化

在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定

int[] array = {1, 2, 3};

两种初始化方式没有本质区别,只是书写上的差异。

【注意事项】

  1. 静态初始化虽然没有指定数组的长度,编译器在编译时会根据{}中元素个数来确定数组的长度。
  2. 静态初始化时, {}中数据类型必须与[]前数据类型一致。
  3. 静态初始化可以简写,省去后面的new 类型[]。
     

2. 数组遍历的方法

数组的长度该如何求解?

如果是C语言的话,需要调用strlen库函数,但是Java不需要。Java中计算数组长度的方法是 数组名 + .length

使用 for-each 遍历数组

for each:又叫增强for循环,for each在遍历的时候无法拿到数组的下标。

public static void main(String[] args) {
        int[] arr = {10, 20, 30};
        for (int x: arr) {
            System.out.println(x + " ");
        }
}

3. 数组转字符串

这里需要用到 Arrays 这个方法,而 Arrays 是Java里自带的一个方法。

这个方法在使用的时候需要提供一个包:

import java.util.Arrays;

 public static void main(String[] args) {
        int[] arr = {10, 20, 30};
        String ret = Arrays.toString(arr);
        System.out.println(ret);
 }

4. 理解数组是一种引用数据类型

4.1 引用类型

引用数据类型创建出来的变量,称为对象的引用,引用中存储了对象的地址。

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

 array 是一个引用。array 这个引用,指向一个对象,并且存了一个对象的地址。

从上图可以看到,引用变量并不直接存储对象本身,可以简单理解成存储的是对象在堆中空间的起始地址。通过该地址,引用变量便可以去操作对象。
 

4.2 空引用 null

null 在 Java 中表示 "空引用" , 也就是一个不指向对象的引用
null 的作用类似于 C 语言中的 NULL (空指针), 都是表示一个无效的内存位置. 因此不能对这个内存进行任何读写操作。在一些程序中要判断是不是空引用来防止报错。


 

5.数组的应用场景

作为函数的参数

public static void func1(int[] arr) {
        arr = new int[10];
}

public static void func2(int[] arr) {
        arr[0] = 99;
}

public static void main(String[] args) {
        int[] array = {1,2,3,4};
        func1(array);
        System.out.println(Arrays.toString(array));
        func2(array);
        System.out.println(Arrays.toString(array));

}

func1方法:改指向的对象

 array 传给func1后,本来arr也会指向array,arr中存放的也会是array的地址;但是func1重新开辟了一块新的空间,arr也就指向了这块空间。由于是两块不同的空间,形参指向的改变不会影响实参的打印,数组的值不会改变,输出 1 2 3 4。

func2方法:改指向对象的内容

 func2改变了指向的内容(数组下标为0的值),指向并没有改变,这个时候输出数组,值也会改变。输出 99 2 3 4

总结:

所谓的 "引用" 本质上只是存了一个地址. Java 将数组设定成引用类型, 这样的话后续进行数组参数传参, 其实只是将数组的地址传入到函数形参中. 这样可以避免对整个数组的拷贝(数组可能比较长, 那么拷贝开销就会很大).

6.二维数组

6.1 理解二维数组是特殊的一维数组

 二维数组的每一个元素都是一个一位数组。

public class Exercise {
    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] + " ");
            }
            System.out.println();
        }
    }
}

6.2 理解不规则数组

不规则数组指的是二维数组的列可以省略行不可以省略

public class Exercise {
    public static void main(String[] args) {
        int[][] array = new int[2][];//数组有两行
        array[0] = new int[20];//第一行有20个元素
        array[1] = new int[10];//第二行有10个元素
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }
    }
}

可以看到当二维数组的列省略后,可以对列进行指定大小。这就造成了每一行的元素可以是不同的数量,也就是每一行列的数量不同。视觉上看上去就是一种不规则的二维数组。

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

与大师约会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值