一、数组的概念及作用
数组的概念:
一组相同数据类型元素的集合,是一个容器
数组的本质:
数组本身是引用数据类型,是一个对象
数组的作用:
数组可以存储基本数据类型,也可以存储引用数据类型
注:
数组创建时必须指定长度,且长度不可变;
数组中每个元素空间是连续的。
二、数组的创建
声明数组的两种方式:
1、 数据类型 [ ] 数组名:
int [] a;
2、 数据类型 数组名 [ ]:
int a [];
例:
创建一个容量为 5 的一个数组,使用默认值对其进行初始化:
int[] ary0 = new int[5];
int ary1[] = new int[5];
默认值:整数为 0 ,浮点数是 0.0,引用类型都是 null ,boolean类型是 false
另例:
int[] a = new int[]{1,2,3,4,5,6,7};
int[] b = {1,2,3,4,5,6,7};
此时 new 后面的 int 中 不能 再填数字
对数组内容的输出:
int[] ary0 = new int[5]; // new 创建一个数组,并指定数组的长度(容量)
System.out.println(ary0); // [I@1b6d3586 ---数组在内存中的地址
System.out.println(Arrays.toString(ary0)); //将数组以字符串形式输出出来
String[] strings = new String[5];
System.out.println(Arrays.toString(strings)); //[null, null, null, null, null]
三、数组的访问与迭代
1、数组的访问
数组元素访问的格式:
数组名[索引]
例如:a[0] 、a[1]
注:数组的索引从 0 开始,且索引的数据类型是整数。
2、数组的迭代
(1)for 循环
例如:
int[] a = new int[]{1,2,3,4,5}
for(int i = 0;i<a.length;i++){
System.out.print(a[i]);
}
(2)加强 for 循环(写法简单,但不能控制循环区间)
格式:
for(数组元素的类型 临时变量名 : 数组名){
System.out.println(临时变量名);
}
即:
int[] b = new int[]{1,2,3,4,5};
for(int i : b){
System.out.println(i);
}
四、数组的排序
1、冒泡排序
思想: 通过将 待排序序列 从前向后(从下标较小的元素开始)依次对相邻两个元素的值进行两两比较,然后将 较大的元素 向后排,就如水底下的气泡一样逐渐向上冒。
代码实现:
public static void main(String[] args) {
int[] arr = {3,11,6,-1,10,2,30};
//定义一个标志位,用于判定元素之间是否进行了交换
boolean flag = false;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
//进入这个if分支里边,则说明有元素进行了交换
//所以将flag=true
flag = true;
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
//在进行完一轮的排序之后,判断本轮是否发生了元素之间的交换
//如果没有发生交换,说明数组已经是有序的了,则直接结束排序
if (!flag) {
break;
} else {
//如果发生了交换,那么在下一轮排序之前将flag再次置为false
//以便记录下一轮排序的时候是否会发生交换
flag = false;
}
System.out.println("第"+(i+1)+"趟:"+ Arrays.toString(arr));
}
}
2、选择排序
思想:是一种简单直观的排序算法。它的工作原理是每一趟从 待排序的数据元素 中选出 最小(或最大)的一个元素,与 尚未排好序 的数列的 最前(或最后)相交换,直到全部待排序的数据元素排完。
代码实现:
int[] arr = {3,11,6,-1,10,2,30};
// 总共要经过 N-1 轮比较
for (int i = 0; i < arr.length - 1; i++) {
//将最小值的索引赋值未排序的第一个数的序列
int min = i;
// 每轮需要比较的次数 N-i
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[min]) {
// 记录目前能找到的最小值元素的下标
min = j;
}
}
// 将找到的最小值和i位置所在的值进行交换
if (i != min) {
int tmp = arr[i];
arr[i] = arr[min];
arr[min] = tmp;
}
System.out.println("第"+(i+1)+"趟:"+ Arrays.toString(arr));
}
五、二维数组
定义:数组的元素是数组的数组。
二位数组的声明:
int[][] a;
int a2[][];
二维数组的创建:
int[][] a = new int[][]{{1,3},{1,2,3},{1,2,3}};
int[][] b = {{1,3},{1,2,3},{1,2,3}};
int[][] c = new int[3][5];
int[][] d = new int[3][];
d[0] = new int[2];
d[1] = new int[4];
d[2] = new int[6];
二维数组的遍历:
int[][] a = new int[][]{{1,2,3},{1,2,3,4},{1,2,3,4,5}};
for(int i =0;i<a.length;i++){
System.out.print("[");
for(int j = 0;j<a[i].length;j++){
System.out.print(a[i][j]);
if(j!=a[i].length-1){
System.out.print(",");
}
}
System.out.print("]\n");