数组
数组是一个引用类型,会涉及到内存的分配问题。但是在实际的开发过程中不经常使用,因为数组最大缺陷的存在: 长度固定。
注:
- 因为数组的长度固定,所以需要考虑它需要的最大容量,防止数组长度不够用;
- 如果想要改变数组的容量,就要用到数组列表(ArrayList,叫做动态数组)或者向量(Vector)。这也是经常使用的,因为在实际开发过程中,需要对数组进行增加或删除等的操作。
但是对于数组,基础知识也是极其重要的。
一、数组的概念
数组是指一组相关类型的变量集合,这些变量可以按照统一的方式进行操作。
二、数组的实例化方式(动态初始化)
数组具有两种实例化方式:
- 声明并开辟数组:
数据类型[ ] 数组名称 =new 数据类型[长度];
或者
数据类型 数组名称[ ] =new 数据类型[长度];
- 分步实例化
第一步:声明数组:
数据类型 数组名称[ ]=null;
或者
数据类型[ ] 数组名称=null;
第二步:开辟数组空间
数组名称=new 数据类型[长度];
几点说明:
- 数组的索引是从0开始的;
- 动态初始化数组开辟空间之后,数组的每个元素都是其数据类型的默认值;
- java提供了一种获得数组动态长度的方式:数组名称.length;
三、数组的实例化方式(静态初始化)
数组首先开辟空间(就是以上动态实例化的两种表达方式),然后使用数组的索引进行内容的设置,就是动态初始化的过程。
但是如果我们希望在定义数组的同时就为其赋值,就可以采用静态初始化来完成。
静态初始化有两种语法表达:
- 简化格式:数据类型 数组名称[ ]={值,值。。。};
- 完整格式:数据类型 数组名称[ ] =new 数据类型[ ]{值,值。。。};(一般采用此种)
四、数组的引用传递
引用传递的本质就是:一块堆内存,可以被多个不同的栈内存所指向。
代码示例:
int data[]=new int[3];
data[0]=0;
data[1]=1;
data[2]=2;
int temp[]=null;
temp=data;//引用传递时不带“[]”
temp[0]=8;
temp[1]=9;
temp[2]=10;
画图解释:
四、二维数组
语法格式:数组名称 [ 行索引 ] [ 列索引 ]
两种初始化方式:
- 数组的动态初始化:
数据类型 对象名称 [ ] [ ]=new 数据类型[ ] [ ] ; - 数组的静态初始化:
数据类型 对象名称 [ ] [ ]=new 数据类型[ ] [ ] {{值,值…}, {值,值…}, {值,值…}…};
五、java对数组的支持
- 数组的排序:java.util.Arrays.sort(数组名称);(默认是升序)
- 数组拷贝:就是将一个数组的一段内容去替换另一个数组的一段内容。
方法:System.arraycopy(源数组名称,源数组开始索引,目标数组名称,目标数组开始索引,拷贝长度);
代码示例:
int data[]=new int[] {1,2,3,4,5,6,7,8,9};
int temp[]=new int[] {10,20,30,40,50,60,70,80,90};
System.arraycopy(temp,4,data,1,3);
printArray(data);//1,50,60,70,5,6,7,8,9
注:当然,对于数组的统计和数组排序等的操作,属于数据统计和算法分析的内容,后面再写。