一、数组的基本概念及作用
数组:是一组相同数据类型元素的集合,是一个容器
①数组可以存储基本数据类型,也可以存储引用数据类型
②数组创建时必须指定长度,且长度不可变
③数组中每个元素空间是连续的
声明数组格式:
数据类型 [] 数组名字 例如:int [] a;
数据类型 数组的名字 [] 例如: int a [];
● 注意: 在Java语言中两种声明方法没有任何区别,但是建议大家用第一种, 避免混淆a的数据类型。
二、数组的创建
●数组的声明的两种方式:
数据类型 [] 数组名字
例如:int [] a; 数据类型
数组的名字 []
例如: int a [];
需要指定数组的长度或容量
● 注意:
输出结果中:
[I@1b6d3586代表数组在内存中的地址(hash值)
Arrays类,java语言中提供的用于操作数组的工具类,提供排序,数组复制
toString(a)把数组以字符串的形式返回,便于调试查看
每个空间会赋予默认值,整数的默认值为0,引用类型默认值都是null,boolean类型默认值都是false
三、数组的访问与迭代
●数组元素的访问:
数组名[索引] 例如:a[0],a[1];
●注意:
数组的索引从0开始。
索引的数据类型是整数(int) ,数组长度最大值就是int的最大值Integer.MAX-VALUE
索引最大值和数组长度始终差1
●获取数组长度
数组名.length
//数组下标越界异常
● 数组迭代的两种方式:
第一种:for循环
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的数据类型 i
2、二维数组的创建
定义了一个整型的二维数组 ,这个二维数组有3个一维数组,每一个一维数组包含5个元素
[ 3]:表示二维数组的长度为3
[ 5]:表示二维数组中,每一个一维数组的长度是5
注意:
输出结果为红色标中的0
{ (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];