何谓数组

初识数组

一、 数组的概述

数组可以看成是多个相同类型数据的组合,对这些数据的统一管理。 

所谓数组(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];

二维数组的遍历

猜你喜欢

转载自www.cnblogs.com/ruanjianwei/p/11781154.html