1.1.5 数组
数组在java语言中是一个比较重要的的地方,我们今天就说说数组
数组可以顺序存储相同类型的多个数据,在后面我们会提及的线性表就是利用数组。
通常情况下对于数组的N个值的编号为0到N-1。对于在者之间的任意的第i个数组就可以用a[i]来唯一表示。这样的数组就是一维数组。
1.1.5.1创建并初始化数组
在Java程序中创建一个数组要注意三个部分:
1、声明创建数组的名字和类型。
2、创建数组。
3、初始化数组元素。
除此之外还有一些要注意的地方,在创建数组的时候必须要指定数组的长度。例如下面这段创建并初始化数组的代码:
double[] a; a=new double[N]; for(int i=0;i<N;i++) a[i]=0.0;
在第一行是数组的声明;第二行是创建了一个名叫a,类型为double,长度为N的数组;第三行则是对该数组进行初始化,把每一个的值都置为0.0。
1.1.5.2 简化写法
依旧以上面我们提到那段代码,我可以将其简化为:
double[] a= new double[N];
只不过在此处我并未对其进行初始化,所以还需要一个for语句来对其初始化。那么还有没更简便的写法。
double[] a={0.1,0.2,0.3,0.4,0.5};
这一段与上一段比较起来,直接省去了for语句来给数组进行初始化,虽然表面上看起来没有N,但实际上N就体现在N个数字上。只不过这一种方法与上一种比较起来,假如要更换一个数组那么就必须在代码上进行更改,比较不方便,所以大多数时候我们就不直接给数组赋值,而是利用循环语句来给数组赋值。
1.1.5.3 使用数组
由于数组一旦创建他的长度就是固定的,所以我们可以用a.length来获取数组长度,同时对于数组,数组的最后一个元素必为a[a.length-1]。
书中还列举了一些典型的数组处理代码,例如寻找最大值,计算平均值,复制数组等,因为他们比较简单所以这里我就不再敲出来,大家可以在网上进行搜索。
1.1.5.4 起别名
这个部分经常会导致一些难以察觉的错误。为什么呢,我们来看看。
首先我们要知道一件事情,数组名代表的整个数组,如果我们将一个数组变量赋予另外一个变量,那么这两个变量就会指向同一个变量,这里有一点像我们后面会讲到的指针,不理解的同学可以先了解一下指针。
我们用一段代码来讲解一下(for语句我会省略掉)
int[] a=new int[N]; …… a[i]=1234; …… int[] b=a; …… b[i]=5678;
当这一段代码编译完成之后再输出a数组,你会发现出现的不再是1234,而是5678。
假如你要复制一个数组那么你就必须创建一个数组,然后将原数组中的值一个接一个的复制到新数组中。
1.1.5.5 二维数组
在数组中有一种特殊的情况就是二维数组,而我们刚刚所说的是一维数组。
关于二维数组我们可以理解为一个一维数组的数组,相当于在一维数组上每个元素不在是一个值,而是一个数组。
double[][] a=new double[M][N];
这便是对二维数组的声明和创建,我们将这样的数组也称之为M×N的数组,值得一提的是,二维数组可以层次不齐,也就是说每一行的长度可以是不一样的。
对于二维数组的赋值就是简单的在一维数组赋值的for语句内再嵌套一个for语句就好。