数组知识小总结

1.数组的定义与使用

数组的概念:数组指的就是一组相关类型的变量集合,并且这些变量可以按照统一的方式进行操作。(数组是引用数据类型,有内存分配问题)

数组初始化
动态初始化:数组首先开辟内存空间,然后使用下标进行内容的设置。
数据类型[ ] 数组名称=new 数据类型[长度];
eg:

int[] array=new int[3];

静态初始化:数组在定义的同时可以设置内容。
eg:

int[ ] array=new int[ ]{ 1, 2,3,4,5,6,7,8,9,10};
简化:int[ ] array={1, 2,3,4,5,6,7,8,9,10};

数组的引用传递

int[ ]array=new int[3];
int[ ]temp=new int[3];
temp=array;

图示:
在这里插入图片描述
在这里插入图片描述
此时,如果更改temp数组中的元素时,即同时改变了array数组中的内容。temp=array 这样的操作也可称为浅拷贝,一块堆内存由两个不同的栈内存指向了。

栈内存中保存堆内存的地址,一块栈内存只能保存一块堆内存地址,但一块堆内存可以由不同的栈内存指向

数组的访问通过索引完成,索引范围是0~数组长度-1,如果访问超过索引访问,那么会产生”java.lang.ArrayIndexOutOfBoundsException”异常信息

2.二维数组
概念:二位数组实际上就是一个一位数组,只是每一个元素又指向一个一维数组。

二维数组动态初始化:
数据类型[ ][ ] 对象数组=new 数据类型 [行个数][列个数];

二维数组静态初始化:
数据类型[ ][ ] 对象数组=new 数据类型 [行个数][列个数]{{值,值,值},{值,值,值},{值,值,值},…};
在这里插入图片描述

扫描二维码关注公众号,回复: 5840726 查看本文章

3.Java对数组的支持

binarySearch (int[ ] a,int key)
使用二叉搜索算法搜索指定的int数组的指定值

copyOf (int[ ] original, int newLength)
复制指定的数组

copyOfRange(int[ ] original,int from, int to)
将指定数组的指定范围复制到新数组中

equals(int[ ] a,int[ ] a2)
如果两个指定的int数组彼此相等,则返回 true

hashCode(int[ ] a)
根据指定数组的内容返回哈希码。

sort(int[ ] a)
按照数字顺序排列指定的数组

toString(int[ ] a)
返回指定数组内容的字符串表示形式

4.数组的拷贝

1>用for循环将一个数组中的每个元素拷贝到新的数组中

2> clone
将array中内容拷贝到array2中:array2= array.clone();

3> Arrays.copyOf(int[ ] original, int newLength)
参数分别是:原数组,拷贝长度。

4>System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
参数分别是:原数组名,拷贝长度的初始下标,目的数组名,开始拷贝的下标,拷贝长度。

第4种是拷贝最快的,底层代码是C/C++

这四种拷贝方法对于基本类型来说是深拷贝,但对于引用类型来说都是浅拷贝

5.对象数组
对象数组往往是以引用数据类型为主的定义,例如:类、接口
类名称[ ] 对象数组名称=new 类名称[长度];

eg: 现有一个Person类,属性包括:String name,int age
定义一个数组并初始化:

动态初始化:

Person[ ] per=new person[3];
Per[0]=new Person(“xiaohua”,10);
Per[1]=new Person(“xiaoming”,11);
Per[2]=new Person(“xiaohong”,12);

静态初始化:

Person[ ] per=new person[ ] {
new Person(“xiaohua”,10),
new Person(“xiaoming”,11),
new Person(“xiaohong”,12) };

猜你喜欢

转载自blog.csdn.net/qq_44779696/article/details/89070726