一、数组引入
生活中有很多同类型的数据,比如分数,身高,体重等等。当我们在编程时,遇到数据的数量少时,可以直接定义一个或几个变量来存储。可是如果数量太多,我们难道定义大量不同名字的变量来存储吗?显然是不可能的。那么如何做到定义一个变量却可以存储多个数据呢?这就是接下来要说的数组了。
数组,可以看成是大量数据共用一个名字,是同一类数据的序列,然后通过编号来访问。它就像一间教室,教室的编号就如同数组名,教室里的同学就如同数据。这些同学都是来上这同一堂课的,这个就是这些同学的共同点,从这个就可以把他们看成相同的数据。因此数组就是多个具有相同类型的数据的集合,就如同数学中的集合。
二、Java数组概述
1、Java数组的大小可以在运行时指定,在声明时不能指定数组元素的个数,这两点与C/C++不同。
2、Java语言的数组时一种引用数据类型,因此数组的名字存在栈区,数据存储在堆区,既数组是对象,继承了Object类的所有方法。
3、Java支持多维数据,比如二维数组,三维数组,且多维数组中的每个一维数组长度可以不同。
4、Java数组可以作为方法参数和返回值。
5、Java为数组提供了Arrays类包以方便数组的操作。
三、创建数组与使用
1、创建数组与初始化:
创建数组有多种方法,但最终都是一样的效果,以下是几种创建数组的方法。
初始化分为两种,分别是:动态初始化,静态初始化。动态初始化就是没有具体内容的,只分配了具体多大内存空间的,如下:
静态初始化则是创建数组的时候同时存入数据,这里要注意的是new关键字后面的方括号里不能写长度,这里长度由数据个数决定了,如下所示:
2、数组的使用:
数组名字后面的方括号称为下标,是用来给数组空间变号以方便数组访问的,数组下标是从0开始的,这一点与C语言一致。方法问数组多用循环和Arrays类的方式。数组作为类提供了一个length成员变量,在用循环操作的时候,可以通过这个成员变量获取数组长度。它的访问方法为:数组名.length
下面是使用演示:
运行结果为:
10
12
10
10
10
数组还可以作为方法的参数和返回值,但是由于数组是对象,所以数组作为参数传递时是按照引用传递,如果方法中修改了数组元素的值,那么该修改会反映到原数组对象。此外数组也可以作为返回值,也就是说一个方法可以返回一个数组对象。
下面是实例:
运行结果:
3、可变参数方法
Java语言允许定义方法时带可变数量的参数,称为可变参数方法。写法就是在方法参数列表的最后一个参数的类型名后、参数名之前用省略号。
例:
可以看到它的实质就相当于是一个数组,可以用数组方式使用。在可变参数前还可以加其他一般参数,用逗号分隔,且可变参数一定是方法的最后一个参数。但是要注意的是,在调用可变参数的方法时,可变参数是可选的,如果没有为可变参数方法传递值,那么编译器会生成一个长度为0的数组,如果传递一个null值,就会产生NullPointerException异常。
四、Arrays类
Arrays类的类包在java.util.Arrays的路径下,其中有sort()对数组进行排序的方法,binarySearch()查找元素的方法,copyOf()和copyOfRange()把一个数组中的全部或者部分元素复制到另一个数组中,以及fill()方法,将一个值填充到数组的没一个元素中,或者几个连续的元素中的等等。具体使用方法请参考JavaAPI文档。
五、二维数组
1、二维数组定义格式及概念:
二维数组可以看成多个一维数组组合成的一个新的数组,或者说是一维数组里面的元素变成了一个数组。
如图,二维数组有三种声明格式,推荐使用第一种。需要注意的是,二维数组在创建后默认值为0。
创建二维数组也有两种格式:
2、二维数组使用:
二维数组用双重嵌套循环来访问每一个元素,外层循环控制行,内层循环控制列。二维数组初始化是在一维数组的基础上再加一层大括号。
例:
3、不规则数组
Java多维数组支持不规则长度,既每一个数组的长度不一样,但是此方法适和用于低维数组引用这类数组除了给数组分配空间,还要为每个数组元素分配空间。
模型图: