数组
在实际应用中,通常有批量的数据需要处理,对于同一类型的批量数据,在程序中再通过定义单个的变量这种方式已经不能解决存储大批量数据的问题了,因为它既不经济,也不实际。对于这种类型的问题,Java提供了“数组(Array)”这种引用数据类型来解决。
认识数组
什么是数组
数组是按照一定顺序排列的、用来存储具有相同数据类型的数据的集合,可以使用共同的名字来引用数组中存储的数据。
数组提供了一种数据分组的便利方法。在数组中,每一项数据都经过编号,可以通过数组的下标(即数据项在数组中的索引值,从0开始。例如,数组中第一项数据的下标为0,第二项数据的下标为1,第N项数据的下标为(N -1)来方便地访问。
数组的特点
在不同的程序设计语言中,一般都提供有数组这种数据类型,功能和使用方法都很类似。不过Java语言中的数组有自己的几个特点:
- Java中的数组,属于引用数据类型,数组的元素可以是基本数据类型,也可以是引用数据类型;
- 数组元素的个数称为数组的长度。数组长度一旦确定,就不能改变;
- 数组元素的下标是从0开始的,即第一个元素的下标是0;
- Java不支持多维数组,但是可以创建数组的数组;
- Java中将数组作为对象处理。数组对象含有成员变量length,用来表示数组的长度;
- 创建数组对象会在内存中开辟出一整块连续的空间,而数组名中引用的是这块连续空间的首地址
- 数组所创建的内存空间只能存储相同类型的数据。
数组的声明与创建
声明一维数组变量
在创建和使用数组的过程中,首先要做的就是声明一个数组变量,来保存实际的数组。声明数组变量的含义如同声明一个原始数据类型的变量,要指明数组将要容纳的数据类型及数组的名字。声明一维数组的语法如下:
数组类型[] 数组名字; //[ ]可以在名字前面或者后面都可以
数组类型 数组名字[];
这两种数组变量声明的方式在作用上是相同的,但通常建议采用第一种方式,它更符合数组变量的原理,即在数组名字前面指定数组可以保存的数据类型,这里使用方括号“[ ]”来代表数组类型。
创建一维数组对象
声明了数组变量之后,下一步就需要创建一个数组对象,并将其赋给所声明的数组变量。而创建数组对象,实际上就是在内存中分配相应大小的存储空间给数组。有两种方式可以用来创建数组对象。
//创建数组的三种方式
int[] arr1= new int[3];// 动态初始化:数组的初始化和数组的元素的赋值分开进行
int[] arr2 = new int[] { 1, 2, 3};//静态初始化:数组的初始化和数组的元素的赋值操作同时进行
int[] arr2 = { 1, 2, 3};//不使用new,指定数组的长度为3,值为1,2,3
使用new运算符来创建数组对象时,必须指定这个数组的大小。创建数组对象时,仅仅是在内存中为数组变量分配指定大小的空间,并没有实际存储数据,这时数组的所有元素会被自动地赋予初值。
也可以通过把数组元素值直接放在大括号中的办法来同时完成创建和初始化数组,这时将在内存中分配与元素数量相适应的空间大小,并赋予指定的元素值。使用这种方法创建数组对象时,大括号里的元素类型必须与指定的数据类型一致,并且数组的大小与大括号中包含的元素个数相同。
数组的使用
访问一维数组元素
当创建了数组变量并赋予数组变量带有初值的数组对象以后,就可以访问一维数组中的元素了。访问一维数组元素,使用该数组的名字,后跟数组下标,如以下代码所示。
String[] studentNames = new String[10];
studentNames[0] = "张三";//访问数组中的第一个元素
这里将数组studentNames的第一个元素studentNames[0]的值设置为字符串“张三”。一定要注意,在Java的数组中,下标是从0开始计数的,所以长度为n的数组第一个元素的下标为0,最后一个元素的下标为n -1。
修改一维数组元素
数组的大小不可改变,但数组中的元素值是可以改变的。在声明一个数组变量和创建一个数组对象以后,可以通过为数组中的元素赋值,来修改数组中任一元素的值。请看下面的代码。
int englishScore[ ] = new int[3]; //定义一个整型数组,用来保存三个同学的英语成绩
//为三个同学的英语成绩赋值
englishScore[0] = 98; //为第一个元素赋值
englishScore[1] = 72; //为第二个元素赋值
englishScore[2] = 65; //为第三个元素赋值
通常数组的大小会远远大于示例中的数组大小,所以在对数组进行操作时,一般都使用循环来重复一个数组元素,而不需要一个一个单独地处理。
一维数组的遍历
int[] a = new int[]{12, 13, 14};
for (int i = 0; i <= a.length - 1; i++) {
System.out.println(a[i]);
}
多维数组
数组元素除了可以是基本数据类型、对象类型之外,还可以是数组,即数组的元素是数组。所以虽然Java不支持多维数组,但是可以通过声明数组的数组来实现同样的功能。元素数组还可以包含数组,依此类推,最后创建出达到需要的任意维数。
声明二维数组变量
在实际应用中,多维数组中使用最多的是二维数组。所以这次主要介绍二维数组的声明、创建和使用,对于其他多维数组的声明、创建和使用,与二维数组相似,。声明二维数组的语法如下。
数组类型[ ][ ] 数组名字;
数组类型 数组名字[ ][ ];
这两种数组变量声明的方式在作用上是相同的,但通常建议采用第一种方式,与声明一维数组类似。
创建二维数组对象
声明了数组变量之后,下一步就需要创建一个数组对象,并将其赋给所声明的数组变量。而创建数组对象实际上就是在内存中分配相应大小的存储空间给数组。有两种方式可以用来创建二维数组对象。
//1.使用new运算符
int[ ][ ] year = new int[52][7] ;
//2.直接初始化数组元素
int[][] arrays2={{11,12,13,14,15},{21,22,23,24,25},{31,32,33,34,35}};
使用new运算符来创建二维数组对象时,必须指定这个数组的大小。在这个代码中,创建了一个二维数组对象,用来保存一年中的52个星期及每个星期的7天。
可以把二维数组想象成一个二维表格,带有行和列。其中行与二维数组的第一维对应,列与二维数组的第二维对应。
也可以通过把数组元素值直接放在大括号中的办法,来同时完成创建和初始化二维数组。在大括号中使用逗号分隔每个花括号,每个花括号中为用逗号分开的行数据。这时将在内存中分配与元素数量相适应的空间大小,并赋予指定的元素值。
访问二维数组元素
访问二维数组元素,指的是读取二维数组中指定位置的元素。要访问二维数组元素,需使用该数组的名字,后面跟两个中括号代表下标,第一个下标为行索引,第二个下标为列索引。如下代码所示。
int[][] arrays2={{11,12,13,14,15},{21,22,23,24,25},{31,32,33,34,35}};
System.out.println(arrays2[0][2]);
上述代码输出数组arrays2的第1行(下标为0)第3列(下标为2)的元素。可以看出,应该输出的值为13。需要注意的是,在二维数组中,行和列的下标都是从0开始计数的。
修改二维数组元素
在声明一个数组变量和创建一个二维数组对象以后,也可以通过为数组中的元素赋值,来修改数组中任一元素的值。这与修改一维数组很类似。请看下面的代码。
int[ ][ ] arrays = {{11,12,13,14,15},{21,22,23,24,25}{31,32,33,34,35}};//定义二维数组
arraysarrays[0][0] = arrays[1][3] + arrays[2][0]; //将两个数组元素相加
System.out.println(arrays[0][0]);//输出结果为55
在这个示例中,读取数组第2行第4列(行和列的下标都是从0开始计算)的元素值24,与数组第3 行第1 列的元素值31 相加,并将结果55 赋给数组第一行第一列的元素arrays[0][0],最后输出arrays[0[0]的值55。通常在对二维数组进行操作时,一般都使用双重循环来处理。
Arrays类
什么是Arrays类
Arrays类是数组的工具类java.util.Arrays。
由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作。
Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而不用使用对象来调用。
常用方法
- 查找数组元素:通过binarySearch方法能对排序好的数组进行二分法操作。
- 数组转字符串:Arrays.toString(array)
- 填充数组: Arrays.fill(array, 1, 4, 2)
- 数组的比较: Arrays.equals(array, array2)
- 数组的排序: Arrays.sort(array, 0, 4)
- 数组的复制: Arrays.copyOf(array, 3)
- 数组转List: Arrays.asList(array)