数组概念
数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
数组既可以存储基本数据类型,也可以存储引用数据类型。
数组一旦初始化,长度不可变。长度确定下来了!
一维数组声明
一维数组的声明方式: 类型 数组名[] 或 类型[] 数组名;
例如:
int a[];
int[] a1;
double b[];
Date[]c; //对象数组
单独声明数组时不能指定其长度(数组中元素的数), 例如:
int a[5]; //非法
这两种定义做完了,数组中是没有元素值的
数组的初始化
Java中的数组必须先初始化,然后才能使用
所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值
Java中可以使用关键字new创建数组对象,完成静态初始化或动态初始化
动态初始化
动态初始化:初始化时只指定数组长度,由系统为数组分配初始值
格式:数据类型[] 数组名 = new 数据类型[数组长度];
数组长度其实就是数组中元素的个数
举例:
int[] arr = new int[3];
解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值
输出数组中元素的值
定义并用运算符new为之分配空间后,才可以引用数组中的某个元素;
每个数组都有一个属性 length 指明它的长度,例如:a.length 指明数组 a 的长度(元素个数)
数组名和编号的配合就可以获取数组中的指定编号的元素。这个编号的专业叫法:索引(下标)。
数组元素的引用方式:数组名[数组元素下标]
数组元素下标可以是整型常量或整型表达式。如a[3] , b[i] , c[6*i]
数组元素下标从0开始;长度为n的数组合法下标取值范围: 0 至 n-1
内存结构
动态初始化数组时,由系统给出初始值,初始值为0。
看下图所示
案例
静态初始化
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度
格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
举例:
int[] arr = new int[]{1,2,3};
解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值,并且值分别是1,2,3。
其实这种写法还有一个简化的写法:
int[] arr = {1,2,3};
案例
注意
int[] a = new int[]; new的时候就要分配内存,不指定就不知道分配多少
数组一旦初始化,长度不可变。长度确定下来了!!!
int[] a ={1,2,3};也可以
int[] a
a={1,2,3};错误
数组常见问题
数组索引越界
ArrayIndexOutOfBoundsException
访问到了数组中的不存在的索引时发生
空指针异常
NullPointerException
数组引用没有指向实体,却在操作实体中的元素时
多维数组
二维数组[][]:数组中的数组 |
格式1(动态初始化):int[][] arr = new int[3][2]; |
定义了名称为arr的二维数组 二维数组中有3个一维数组 每一个一维数组中有2个元素 一维数组的名称分别为arr[0], arr[1], arr[2] 给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78; |
格式2(动态初始化):int[][] arr = new int[3][]; |
二维数组中有3个一维数组。 每个一维数组都是默认初始化值null (注意:区别于格式1) 可以对这个三个一维数组分别进行初始化 arr[0] = new int[3]; arr[1] = new int[1]; arr[2] = new int[2]; 注: int[][]arr = new int[][3]; //非法 |
格式3(静态初始化):int[][] arr = new int[][]{{3,8,2},{2,7},{9,0,1,6}}; |
定义一个名称为arr的二维数组,二维数组中有三个一维数组 每一个一维数组中具体元素也都已初始化 第一个一维数组 arr[0] = {3,8,2}; 第二个一维数组 arr[1] = {2,7}; 第三个一维数组 arr[2] = {9,0,1,6}; 第三个一维数组的长度表示方式:arr[2].length; |
Ø
注意特殊写法情况:
int
[]
x,y
[]; x
是一维数组,
y
是二维数组。
Ø
Java
中多维数组
不
必都是规则矩阵形式
|
数组排序
冒泡排序
我们的的数组常常是无序的,如何对数组排序也是我们必须要掌握的。排序的方法也有很多种,在这里我们介绍一下冒泡排序法。
冒泡排序的基本思路:假设要被排序的数组arr[0…n-1]是垂直放置的,我们将其中的每个元素都看成重量为arr[i]的气泡。那么,根据常识,我们知道重量轻的气泡会向上冒。所以我们制定轻气泡不能在重气泡下的原则。现在,我们从下向上扫描数组arr[n]中的每个元素,凡是发现违反本原则的轻气泡,就使其向上“冒”,反复的执行这个过程,直到所有元素都满足该原则。
冒泡算法原理
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
12,15,9,5,29,37
冒泡排序效果
如何用二重循环将5个数字排序?N = 5
5个数字存放在一维数组中
外层循环控制比较多少轮,循环变量 i
内层循环控制每轮比较多少次,循环变量 j
代码框架
关键代码分析:5个学生成绩排序