数组是编程语言中最常见的一种数据结构,不同语言对数组的实现及处理也不尽相同。那么Java中的数组又是怎样的呢?我们该如何定义和使用数组呢?所以,下面让我们一起来学习数组的相关知识。
一、数组的分类
在Java中,数组就是一个变量,用于将相同数据类型的数据存储在内存中。其中,一个数据被称为数组元素。
Java数组是引用数据类型,其分类为:
(1)一维数组:
1. 数组创建的格式:
DataType[] ArrayName= new DataType[length];
or DataType[] ArrayName ={element1,element2,element3……};
2.数组的长度:
数组的长度是固定的,必须在创建数组时给定,并且在给定之后使用过程中则不能修改。
3.数组的属性和方法:
属性:唯一的属性——length;
方法:只有继承自Object的方法。
(2)二维数组:
1.二维数组的定义:
二维数组是一个一维数组,该一位数组中每一个元素又是一个一维数组。
2. 二维数组的创建:
DataType[][] ArrayName= new DataType[length1][length2];//length2创建时非必需 Or DataType[][] ArrayName= {{element,element…},{element,element…}…};
二、数组的声明
Java语言支持两种语法格式来声明数组:
DataType[] ArrayName;//推荐使用
DataType ArrayName[];
三、数组的初始化
Java语言中,数组初始化以后才能使用。
原因:数组是一种引用类型的变量,因此使用它声明一个变量时,仅仅表示定义了一个引用变量(也就是定义了一个指针),这个引用变量还未指向任何有效的内存。因此这个数组还不能使用,只有对数组初始化后,才可以使用。
① 初始化的定义:为数组的数组元素分配内存空间,并为每个数组元素赋初始值;
② 初始化的两种方式:
静态初始化:
(1)定义:初始化时由程序员显式指定每一个数组元素的初始值,由系统决定需要的数组长度;
(2)语法格式:
arrayName=new dataType[]{element1,element2,element3…};
or arrayName={element1,element2,element3…};
(3)示例代码:
String[] shapeBtn={"dot","line","rect","round","Rrect","square","polygon","pencil","eraser"}
//动态初始化一个Graph类型的数组
动态初始化:
(1)定义:只指定数组的长度,由系统为每一个数组元素指定初始值;
(2)语法格式:
arrayName=new dataType[length];
//int整型的length参数指定了数组能够容纳数组元素的个数
(3)示例代码:
private Graph[] array = new Graph[100];// 动态初始化一个Graph类型的数组
四、数组的使用
因为数组里所有的元素在内存里是连续的,所以我们可以通过int类型的下标值来访问数组元素。
数组访问元素:
ArrayName[index]; //index的范围:0~length-1
倘若超出index范围:ArrayIndexOutOfBoundsException //数组索引越界异常
访问到数组元素后,就可以把一个数组元素当作一个普通变量使用,其类型为定义数组时使用的类型。
1.为访问到的元素赋值示例代码:
Graph gr = new Graph();//创建一个Graph对象
array[2] = gr;//为访问到的数组元素赋值
2.取出访问到的元素示例代码:
Graph s = array[2];//数组的类型为Graph
五、foreach循环
1.用途:遍历数组和集合;
2.特点:无需获得数组或集合的长度,无需通过索引来访问数组元素或者集合元素;
3.语法格式:
for(type variableName:array|collection)
{
//variableName(形参名,循环变量)自动迭代访问每个元素……
}
4.注意事项:使用foreach时,并不能改变数组元素的值,因此不要对foreach的循环变量赋值;
5.示例代码:
public static void main(String [] args){
int[] a={5,4,1,2,1,9,2,2,1};
//foreach循环遍历数组元素
for(int i:a){
System.out.print(i);
}
}
}
六、数组的优势和缺点
优势:
数组与其它容器的区别体现在三个方面:效率,类型识别以及可以持有primitives。
数组是Java提供的,能随机存储和访问reference(引用)序列的诸多方法中的,最高效的一种。数组是一个简单的线性序列,所以它可以快速的访问其中的元素。
缺点:
高效是有代价的:当你创建了一个数组之后,它的容量就固定了,而且在其生命周期里不能改变。也许你会提议先创建一个数组,等到快不够用的时候,再创建一个新的,然后将旧的数组里的reference全部导到新的里面。其实ArrayList(数组列表)就是这么做的。但是这种灵活性所带来的开销,使得ArrayList的效率比起数组有了明显下降。
七、总结