Java中的数组

以下内容为本人观看尚硅谷Java学习视频所做的笔记

数组

数组:多个相同类型数据按一定顺序排列的组合,使用一个名字命名,并通过编号的方式对这些数据进行统一管理。

数组的特点:

        1、有序排列

        2、属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型

        3、创建数组对象会在内存中开辟一整块连续的空间

        4、数据的长度一旦确定,就不能修改

数组的分类:

        1、按照维数:一维数组、二维数组……

        2、按照元素类型:基本数据类型元素的数组、引用数据类型元素的数组

一维数组的使用:

1、一维数组的声明和初始化:

int[] ids;//声明

ids = new int[]{1001,1002,1003};//静态初始化:数组的初始化和数组元素的赋值操作同时进行

String[] names = new String[5];//动态初始化:数组的初始化和数组元素的赋值操作分开进行

其他正确写法:

String names[] = new String[5];

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

错误的写法:

int[] arr1 = new int[];

int[5] arr2 = new int[5];

int[] arr3 = new int[3]{1,2,3};

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

总结:数组一旦初始化完成,长度就确定了

2、如何调用数组的指定位置的元素:通过角标的方式调用

数组的角标(或索引)从0开始的,到数组的长度-1结束

names[0] = “James”;

names[1] = “Curry”;

3、如何获取数组的长度

属性:length

names.length

4、遍历数组

for(int i = 0; i < names.length; i++)

5、数组元素的默认初始化值

整型:0

浮点型:0.0

char型:0或‘\u0000’(但不是‘0’),输出时候表现为空格

boolean型:false

引用数据类型:null

6、数组的内存解析

二维数组:

1、对于二维数组的理解:

        对于二维数组的理解,我们可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。其实,从数组底层的运行机制来看,其实没有多维数组

2、二维数组的使用:

①二维数组的声明和使用

int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}}; //静态初始化

String[][] arr2 = new String[3][2]; //动态初始化1

String[][] arr3 = new String[3][]; //动态初始化2

其他正确写法:

int[] arr4[] = new int[][]{{1,2,3},{4,5},{6,7,8}};

int[] arr5[] = {{1,2,3},{4,5},{6,7,8]};

错误的写法:

String[][] arr4 = new String[][4];

String[4][3] arr5 = new String[][];

int[][] arr6 = new int[4][3]{{1,2,3},{4,5},{6,7,8}};

②调用数组指定位置的元素

arr1[0][1];

③获取数组的长度

int[][] arr4 = new int[][]{{1,2,3},{4,5},{6,7,8}};

arr4.length为3

arr4[0].length为3

arr4[1].length为2

④数组的遍历

for(int i = 0; i < arr.length; i++)

for(int j = 0; j < arr[i].length; j++)

⑤数组元素的默认初始化值

针对初始化方式1:比如int[][] arr = new int[4][3];

外层元素初始化值:地址值

内层元素的初始化值:与一维数组初始化情况相同

针对初始化方式2:比如int[][] arr = new int[4][];

外层元素的初始化值:null

内存元素的初始化值:不能调用,否则报错

例:

int[][] arr = new int[][]{{1,2,3},{4,5},{6,7,8}};

arr为一个地址值

arr[0]为一个地址值

arr[0][0]为0

-----------------------------------

int[][] arr = new int[4][];

arr[1]为null

输出arr[1][0]会报错

⑥数组的内存解析

数组复制问题:

array1是一个数组,我们进行操作array2 = array1,是将array1的地址赋给了array2,这时候修改array2中的元素的值,array1元素的值也会发生改变,因为它们的地址是相同的,堆中实际上只有一个数组。所以 array2 = array1不算数组的复制。

注意:如果array1是一个一维数组,array2是一个二维数组,那么array1 = array2的操作是不允许的,因为虽然array1和array2实际上存的都是一个地址值,但是两个的变量类型不一样。赋值操作要求变量类型需要一致

数组的正确复制操作:

array2 = new int[array1.length];

for(int i = 0;i < array2.length; i++){

    array2 = array1[i];

}

数组中的常见异常:

1、数组角标越界的异常:ArrayIndexOutOfBoundsExcetion

下标超过了数组范围

2、空指针异常:NullPointerException

就是数组变量此时并未存储地址值,存的是null,但是要去访问数组的内容,就会造成空指针异常。

例如:

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

array = null;

System.out.println(array[0]);

Arrays工具类的使用

java.until.Arrays类即为操作数组的工具类,包含了用来操作数组的各种方法

方法举例:

boolean equals(int[] a, int[] b) — 判断两个数组是否相等

String toString(int[] a) — 输出数组信息

void fill(int[] a, int val) — 将指定值填充到数组之中(将数组中所有元素的值设置为指定值)

void sort(int[] a) — 对数组进行排序

int binarySearch(int[] a, int key) — 对排序后的数组进行二分法检索指定的值,返回该值的所在元素的下标,返回负数则意味着没找到指定值

调用方法的形式:Arrays.xxx(yyy),xxx为方法名,yyy为参数列表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值