1.一维数组

1.一维数组

(1)一维数组的定义

或者

数组的概念2

int是数组中每个元素的类型,arr是数组的名字,10是数组的长度。

Java数组的定义分为三步。

第一步,定义数组的引用空间。例如,代码4.1中第9行的“int[]arr;”这一句声明了整型数组arr,开辟了内存空间,这个内存空间用来保存数组的首地址,在没有赋值之前,初值是随机数,这种内存空间称为“栈”空间。可以理解为:数组名指代的是数组的首地址。

第二步,用new开辟数组的实际对象空间,这里必须给出数组长度,如new int[10]。用new开辟的内存空间在赋值之前是有默认初值的,初值由数组类型决定(整形是0,浮点是0.0,布尔类型是false,引用类型是null),这种用new开辟的内存空间称为“堆”空间。

第三步,将数组对象空间的首地址赋值给数组名所指代的引用空间。例如,“arr=new int[10]”表示将右边用new开辟的空间首地址赋值给arr。

Java数组在定义的时候开辟固定大小的内存空间,并且内存空间是连续的。在数组中,每个单元用数组名和下标来标识:数组名[下标]。下标是从0开始的自然数。Java数组内存空间的分配如图1.4.1所示。

图1.4.1 Java数组内存空间的分配

数组有一个属性length,length表示是数组的长度。所以,数组arr的有效下标是从0到arr.length-1。

【例4.2】需求:从键盘输入10个年龄,输出年龄的平均数,再输出大于平均年龄的有多少个。

【代码4.2】

代码4.2

注意,数组不可以整体操作,一次只能对数组的一个单元进行操作。例如,

(2)一维数组的初始化

数组可以用赋初值来定义:

(3)一维数组的操作

数组的每个单元是连续的,如果要在第i下标单元插入新单元,那么就要将从数组尾开始到下标i的元素依次后移,然后插入新单元;如果要删除第i下标的单元,那么就要从第i+1下标单元到数组尾,每个单元依次前移。

【例4.3】需求:进行数组插入删除练习,假设有数组10,20,5,30,40,50,请删除数组中下标为2的单元,然后在下标为3的单元位置插入新单元100。

【代码4.3】

代码4.3-1

代码4.3-2

【例4.4】需求:对无序的10个整数进行排序。

分析:将无序的10个整数存入一个数组。排序的经典算法有若干种,各种算法的性能有所不同,大家可以自行学习,这里介绍一种“冒泡排序”算法。

“冒泡排序”的算法思想如下。

对n个数进行排序,数组下标从0到n-1。

①从数组0下标开始,依此比较相邻的两个元素。如果前一个比后一个大,就交换这两个数,一直到数组结束。这个过程叫作“一趟”,每走一趟,最大的元素就会来到最尾端。

②去掉最尾端元素,再次从0下标元素开始,做和第1步同样的操作,循环n-1趟。

例如,无序的5个整数用“冒泡排序”算法进行排序的过程如图1.4.2所示。

图1.4.2 “冒泡排序”算法的过程演示

【代码4.4】

代码4.4-1

代码4.4-2