数组的主要特点:
- 一个数组中的元素应该是相同数据类型的
- 数组中的各个元素是有序的,它们在内存中按照先后顺序连续存放在一起
- 每个数组元素用其所在数组的名字和数组下标来确定
- 数组的下标从0开始,数组的长度是指其所包含的数组元素的个数
数组类型是一种引用数据类型。数组元素可以是简单数据类型,也可以是对象数据类型。
一、一维数组
1、一维数组的声明
声明数组包括数组的名字、数组包含的元素的数据类型
double[] scores;
Student[] students;
2、数组的创建
在声明一个数组时,并不在内存中给数组分配任何内存空间,仅仅创建了一个引用数据的存放地址。数组声明的目的只是告诉系统一个新的数组的名称和类型,数组本身不能存放任何数据元素,现阶段的数组值为 null 。因此,使用数组之前,需要先使用new关键字创建数组,为数组分配指定长度的内存空间。
scores = new double[4];
3、数组的初始化
数组创建后,如果不对其进行初始化,系统会根据其类型自动为元素赋值,如果数组元素是引用数据类型,元素的默认初始化是null。可以在声明数组的同时进行初始化,也可以先声明后初始化。
4、数组的使用
(1)数组的长度
scores.length
(2)数组元素的访问
for(int index=0; index < scores.length; index++) {
……
}
使用数组时要注意下标值不要超过范围,数组元素的下标从0开始,直到数组元素个数减1为止,如果下标超过范围,则运行时会产生"数组访问越界异常"
(3)数组的复制
可以把一个数组的变量赋值给另一个数组,但是两个变量引用的都是同一个内存地址空间,因此,如果改变一个数组的值,另一个数组变量也会改变。
int[] num = {4,2,3,1,9,0};
int[] numcopy = num;
numcopy[2] = 2;
// num[2] = 2;
如果要将数组中元素的值复制给另外一个元素,又不想改变原数组的值,可以用System类中的arraycopy()方法:
System.arraycopy(src,srcPos,dest,destPos,length)
从src数组中的srcPos位置复制length个元素到dest数组的destPos开始位置。并且,src和dest指向两个不同的内存空间。
二、多维数组
多维数组其实是数组的数组,由于多维数组的元素也是数组,所以需要为数组元素分配相应的存储空间,分配空间可以在创建数组的同时进行,也可以用new运算符为数组元素分配内存。
如果多维数组中的每维数组的长度不同,就造成数组空间的分配不连续。当然,一维数组的空间仍然是连续分配的。
以二维数组为例,说明二维数组如何进行定义、创建和使用等:
1、二维数组的声明
double[][] scores;
2、二维数组的初始化
二维数组的初始化可以通过 new 关键字初始化,或在声明的同时使用赋值语句初始化。
(1)用new关键字初始化
scores = new double[4][3];
表明scores数组是一个4行3列的数组,初始化时每个元素均为0.0;
二维数组的元素是一维数组,因此,初始化也可以各行单独进行。
double[][] scores;
score = new double[3][];
score[0] = new double[3];
score[1] = new double[2];
score[2] = new double[4];
(2)用赋初值的方法初始化
double[][] scores = {{56,48,96},{100,78},{99,63,79,45}};
3、二维数组的使用
二维数组使用两个下标,一个表示行,一个表示列,每个下标的类型都是 int 类型,而且都是从0开始的。可以通过元素在数组中的行号和列号访问元素。
可以通过length来获取二维数组的行数和每行包含的元素个数:
数组.length // 获得数组的行数
数组[行号].length //获得数组指定行号的列数
三、数组类
Java的工具包util中提供了工具类Arrays,可以方便地进行数组的操作(如搜索和排序等)。
Arrays提供几个基本方法: