数组的概念:数组指的就是⼀组相关类型的变量集合并且这些变量可以按照统⼀的⽅式进⾏。数组为引用数据类型。
数组分为一维数组、二维数组和三维数组…我们可以把二维数组看作是元素为一维数组的一维数组;同样,我们可以把三维数组看作是元素为二维数组的一维数组…以此类推。不过除了一维数组使用较为频繁以外,其他数组使用的比较少,所以此处不做过多介绍。
上面谈到,数组为引用数据类型,所以必然存在内存分配问题。
数组的初始化
数组动态初始化( 声明并开辟数组):
数据类型[] 数组名称 = new 数据类型 [⻓度] ;
1.数组的访问通过索引完成。即:“数组名称[索引]”,注意:数组索引从0开始,因此可以采⽤的索引范围就是0~索引-1;假设现在开辟了3个空间的数组,那么可以使⽤的索引是:0、1、2。如果访问超过索引访问,那么会产
⽣"java.lang.ArrayIndexOutOfBoundsException"异常信息;
2.当数组采⽤动态初始化开辟空间之后,数组之中的每个元素都是该数据类型的默认值;
3.数组本身是⼀个有序的集合操作,所以对于数组的内容操作往往采⽤循环的模式完成。(数组是⼀个有限的集合,采⽤for循环);
4.在Java中有⼀种动态取得数组⻓度的⽅法:数组名称.length;
**注意:**数组属于引⽤数据类型,因此在使⽤之前⼀定要开辟空间(实例化),否则就会产⽣NullPoninterException
数组静态初始化:
数组的静态初始化语法⼀共分为以下两种(推荐使⽤第⼆种完整格式):
简化格式:数据类型[] 数组名称 = {值,值,…};
完整格式:数据类型[] 数组名称 = new 数据类型[] {值,值,…};
在开发之中,对于静态数组初始化强烈推荐完整格式,这样可以轻松使⽤匿名数组这⼀概念。
数组作为引⽤数据类型,也⼀定可以发⽣引⽤传递。
引⽤传递空间:同⼀块堆内存空间可以被不同的栈内存所指向。
如下图所示:
引⽤传递的内存分析都是类似的:同⼀块堆被不同的栈内存指向。
Java对数组的支持(Arrays工具类)
实现数组排序:
Java类库中数组排序操作如 : java.util.Arrays.sort(arrayName) ;
只要是基本数据类型的数组,sort⽅法都可以进⾏排序处理(升序处理)。内部使⽤双轴快速排序。
实现数组拷贝:
数组部分拷⻉:指的是将⼀个数组的部分内容替换掉另⼀个数组的部分内容(必须是连续的),以下有四种方法供参考:
- 使用for()循环可以实现数组部分的拷贝;
- 使用clone实现数组部分的拷贝;
- System.arraycopy(源数组名称,源数组开始点,⽬标数组名称,⽬标数组开始点,拷⻉⻓度);
- java.util.Arrays.copyOf(源数组名称,新数组⻓度);
Arrays工具类中还有很多操作数组的函数,可以查阅 jdk api 进行使用,在此不再赘述。
对象数组
上面介绍的都是基本类型的数组,对象数组往往是以引⽤数据类型为主的定义,例如:类、接口。
对象数组的初始化也分为动态初始化和静态初始化两种。
以上是对Java数组的一些介绍和认识,如有哪些地方有错误或者不足,请评论指出。