一、数组的基本概念及作用
1.基本概念
是一组相同数据类型元素的集合,是一个容器
2.作用
①数组可以存储基本数据类型,也可以存储引用数据类型
②数组创建时必须指定长度,且长度不可变
③数组中每个元素空间是连续的
二、数组的创建
数组声明的两种方式:(声明数组格式)
数据类型 [ ] 数组名字
例如:int [ ] a;
数据类型 数组的名字 [ ]
例如:int a [ ];
需要指定数组的长度或容量
● 注意:
在Java语言中两种声明方法没有任何区别,但是建议大家用第一种, 避免混淆a的数据类型。
● 注意:
输出结果中:
直接输出a输出的是[I@1b6d3586代表数组在内存中的地址(hash值)
Arrays类,java语言中提供的用于操作数组的工具类,提供排序,数组复制
Arrayrs类中的toString(a)方法把数组以字符串的形式返回,便于调试查看
每个空间会赋予默认值
整数的默认值为0
引用类型默认值都是null
boolean类型默认值都是false
三、数组的访问与迭代
1.数组元素的访问
数组名[索引]
例如:
a[0],a[1];
!!!注意
数组的索引从0开始。
索引的数据类型是整数(int) ,数组长度最大值就是int的最大值Integer.MAX-VALUE
索引最大值和数组长度始终差1
获取数组长度: 数组名.length
//数组下标越界会出现异常
2.数组迭代的两种方式
①for循环
int [ ] b1 = new int [ ]{1,2,3,4,5,6,7};
数组的迭代
for(int i =0;i<b1.length;i++){
System.out.println(b1[i]);
}
②增强for循环
int t 声明一个临时遍历,用来接收每次循环时,从数组中取出的元素
a 遍历的组数
int [ ] b1 = new int [ ]{1,2,3,4,5,6,7};
for(数组元素的类型 临时变量名字 :数组的名字){
System.out.println(临时变量名字 );
}
即:
for(int x : b1)
System.out.println(x);
}
③两种迭代方式的比较
增强for循环
优点:适合挨个的遍历每一个元素,而且写法简单
缺点:不能控制某一区间的遍历
for循环
灵活的控制遍历区间
四、数组排序
1.冒泡排序
每次取出相邻的两个元素进行比较,将较大的向后移,每比较一趟可以找出一个最大值
2.选择排序
从第一个元素开始,与之后的每一个元素进行比较将较小的移到第一个位置,以此类推
未优化前:
优化后:
!!!补充
Debug模式,用来调试程序逐行运行程序
断点:需要从哪行开始调试,就在那一部设置断点
以debug模式启动
F8 step over 步调 执行一步
调试完成后 释放程序
五、二维数组
1、二维数组的声明
int [ ][ ] a;
int a2[ ][ ];
●注意:建议用第一种,不容易混淆a的数据类型
2、二维数组的创建
定义了一个整型的二维数组 ,这个二维数组有3个一维数组,每一个一维数组包含5个元素
[ 3]: 表示二维数组的长度为3
[ 5]: 表示二维数组中,每一个一维数组的长度是5
!!!注意
输出
结果为红色标中的值
{ (0,0,0,0,0),(0,0,0,0,0),(0,0,0,0,0)}
0 1 2 3 4
0 1 2
创建二维数组的三种方式:
●Int [ ][ ] a =new int[3][5];
●Int [ ][ ] a =new int[ ][ ]{{1,2,3},{1,2,3},{1,2,3}};
●Int [ ][ ] a ={{1,2,3},{1,2,3},{1,2,3}};
//[3][ ]:只声明了二维数组的长度是3,并没有声明二维数组中的一维数组的长度,也不会创建一维数组
{null,null,null}
如果要使用的话,可以对每个二维数组单独创建一维数组:
Int [ ][ ] a =new int[3][ ];
a[0] = new int[10];
a[1] = new int[5];
a[2] = new int[7];
3、二维数组的遍历
输出结果: