何谓数组
初识数组
一、 数组的概述
数组可以看成是多个相同类型数据的组合,对这些数据的统一管理。
所谓数组(Array),就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类 型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为 数 组名,编号称为 下标。组成数组的各个变量称为数组的分量,也称为数组的 元素,有 时也称为下标变量。数组是在程序设计中,为了处理方便,把具有相同类型的若干变 量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组 “[]”。
数组变量属于引用类型,数组也可看成是对象,数组中的每个元素相当于该对象的成 员变量
数组中的元素可以是任何数据类型,包括基本类型和引用类型。
数组是相同数据类型的有序集合。数组描述的是相同类型的若干个数据,按照一定的先 后次序排列组合而成。其中,每一个数据称作一个数组元素,每个数组元素可以通过一个 下标来访问它们.
数组具有以下特点:
定长:长度一旦确定不可以改变。
相同数据类型:其元素必须是 相同 类型,不允许出现混合类型。数组中的元素可以是任何数据类型,包括基本类型和引用类型。
位置有序:元素所在的位置是有序的。
数组本身属于引用类型:数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成 员变量。数组本身就是对象,Java 中对象是在堆中的,因此数组无论保存基本类型还 是其他对象类型,数组对象本身是在堆中的。
二、 一维数组的声明方法
type var[]; 或 type[] var; 推荐使用后一种
例如:
int a1[];
int[] a2;
Person[] p1;
Java语言中声明数组时不能指定其长度(数组中元素的个数),例如:
int a[5]; // 非法
三、 数组对象的创建
Java中使用关键字new创建数组对象:
数组名 = new 数组元素的类型[数组元素的个数]
int[] s;
s = new int[5];
注意:元素为引用数据类型的数组中的每一个元素都需要实例化
Person[] people;
people = new Person[3];
people[0] = new Person();
people[1] = new Person();
people[2] = new Person();
四、 数组的初始化
1. 动态初始化
数组定义与为数组元素分配空间和赋值的操作分开进行
int[] a;
a = new int[3];
a[0] = 1; a[1] = 2; a[2] = 3;
2. 静态初始化
在定义数组的同时就为数组元素分配空间并赋值
int[] a = {1,2,3};
数组元素的默认初始化
数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也 被按照成员变量的规则被隐式初始化
int[] a = new int[5];
五、 数组元素的引用
定义并用运算符 new 为之分配空间之后,才可以引用数组中的每个元素,数组元素的 引用方式为:
arrayName[index];
index为数组元素下标,可以是整型常量或整型表达式。如:
a[3], b[i], c[5*i]
数组元素下标从0开始;长度为 n的数组的合法下标取值范围为
0~n-1
每个数组都有一个属性 length指明它的长度
a.length的值为数组a的长度(元素的个数)
六、 一维数组的遍历
1、普通 for
for(int 索引=0;索引<长度; 索引++){
数组名称[索引] = 值;
}
2、增强 for
for(元素类型 局部变量 : 数组){
局部变量
}
七、 数组的界限
1、必须开辟空间才能使用否则出现 java.lang.NullPointerException
2、索引的范围 [0,length) 否则出现
java.lang.ArrayIndexOutOfBoundsException
3、长度:[0,∞) 理想状态
0 表示空数组,确定了存放的数据类型,该数组不能直接使用,如果使用
java.lang.ArrayIndexOutOfBoundsException
-1:编译通过,运行错误,如果使用
java.lang.NegativeArraySizeException
数组的排序及指定元素的查找
数组内容的比较可以使用 equals()方法吗?
Arrays.equals():比较数组
Arrays. sort (): 排序
Arrays.binarySearch( 数组, , 元素) ) :二分法查找
数组 copyOf(源数组,长度)
使用java.lang.System类的静态方法
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 从指定源数组中复制一个数组,复制从指定的位置开始,到目标 数组的指定位置结束。 src - 源数组 srcPos - 源数组中的起始位置 dest - 目标数组 destPos - 目标数据中的起始位置 length - 要复制的数组元素的数量 如果源数据数目超过目标数组边界则会抛出 IndexOutOfBoundsException异常
八、 二维数组
二维数组可以看成以数组为元素的数组
int[][] a = {{1},{2,3},{4,5,6}};
Java中多维数组的声明和初始化应按从高维到低维的顺序进行
int[][] a = new int[3][];
a[0] = new int[2];
a[1] = new int[1];
a[2] = new int[4];
int[][] a1 = new int[][4]; //非法
九、 二维数组初始化
静态初始化
int[][] intA = {{0},{3},{2,1}};
int[3][2] intB = {{1,2},{3,4},{5,6}}; // 非法
动态初始化
int[][] a = new int[3][5];
int[][] b = new int[2][];
b[0] = new int[5];
b[1] = new int[2];
二维数组的遍历