第六章数组
一、一维数组
语法:
数组元素类型 数组名字[];
数组元素类型 []数组名字;
两种语法效果是完全一致的;
初始化:
初始化有以上三种方法;
数组的length属性:
二、二维数组:
语法:
数组元素类型 数组名字[][];
数组元素类型[][] 数组名字;
初始化:
三、遍历数组:
遍历数组就是获取数组中的每个元素;
第一种方法:
for循环:
int a[][] = new int[][] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
for (int i = 0; i < a.length; i++) { // for循环
for (int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j]);
if (i == (a.length - 1) && j == (a[i].length - 1)) {
//判断是否是最后一行,判断是否是最后一列;
} else {
System.out.print(".");
}
}
}
第二种方法:
foreach循环:
int i = 0; //配合if判断句,如果定义在循环内就会被循环定义为0;
for (int[] a1 : a) { // foreach循环
i++;
int j = 0;
//配合if判断句,如果定义在复合循环内就会循环定义为0;
for (int a2 : a1) {
j++;
if (i == a.length && j == a1.length) {
//判断是否是最一行,最后一列
System.out.print(a2);
} else {
System.out.print(a2 + ".");
}
}
}
四、填充和批量替换数组元素:
填充之间数组内不应该有其他元素,否则会被覆盖;
填充、例:
int a[] = new int[5]; //创建数组;
a[0] = 1;
//给下标为0的元素赋值1,为了证明会被覆盖
Arrays.fill(a, 6); //调用方法把6填充a数组
for (int i : a) { //用foreach循环输出
System.out.print(i);
}
结果:元素都被填充为6,赋值的a[0]也不意外;
替换、例:
char b[] = { '1', '8', '6', '5', '5', '4', '0', '1', '8', '1', '7' };
//创建字符数组
Arrays.fill(b, 3, 7, '*');
//调用方法把b数组索引3到索引7之前的元素全替换成*
for (char i : b) { // foreach循环输出;
System.out.print(i);
}
结果:索引3到索引6的四位元素被替换为*;
五、排序方法(升序):Arrays.Sort()方法
语法:
Arrays.sort(arr);
例:
int[] a = { 58, 11, 66, 25, 1, 56, 2 };
Arrays.sort(a);
for (int i : a) {
System.out.print(i + " ");
}
结果:1 2 11 25 56 58 66,数组内的数组升序输出;
六、复制数组;
实例:
int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8 };
//创建数组arr
int[] b = Arrays.copyOf(arr, 5);
//创建数组b,用copyOF方法把数组arr中数组长度到5的元素赋予b
for (int i : arr) { // foreach语句输出循环输出arr里面的值
System.out.print(i + " ");
}
System.out.println();
// foreach语句循环输出b里面的值;
for (int i : b) {
System.out.print(i + " ");
}
System.out.println();
int[] c = Arrays.copyOfRange(arr, 1, 6);
//创建数组c,用copyOfRange方法截取arr数组的索引1到索引6之前的元素,复制给数组c
for (int i : c) { // foreach语句循环输出c
System.out.print(i + " ");
}
七、数组查询:
语法:
binarySearch(Object[] a,Object key);
a:要搜索的数组;
key:要搜索的值;
binarySearch(Object[] a,int fromIndex, int toIndex, Object key);
a:要进行检索的数组;
fromIndex:指定范围开始处索引(包含)
toIndex:指定范围结束处索引(不包含)
key:要搜索的元素;
实例:
int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8 };
//创建数组arr
int b = Arrays.binarySearch(arr, 5);
System.out.println(b);
//调用binarySearch方法,在数组arr中搜索5,并将其索引位置返回赋予b
int c = Arrays.binarySearch(arr, 0, 4, 2);
System.out.println(c);
//调用binarySearch方法,在数组arr索引0到索引3中搜索2,并将其索引位置返回赋予c
注:在此调用前必须用sort()方法进行排序,上例中数据是1到8升序;
八.冒泡排序
冒泡排序的主要思想:把相邻两个元素进行比较如果满足一定条件则进行交换(如判断大小日期前后等),每次循环将最大(或最小)的元素排最后,下一次循环是对数组中的其他的元素进行类似的操作;
实例:
int[] a = { 3, 4, 77, 44, 2, 46, 33 };
for (int i = 1; i < a.length; i++) {// 用来循环总共要排序几次
for (intj = 0; j < a.length - i; j++) { // 用来循环元素移动循环
if (a[j] <a[j + 1]) {// 用来判断元素是否需要移动
int tame;
tame = a[j];
a[j] =a[j + 1];
a[j + 1] =tame;
// 用来移动元素;
}
}
}
for (int i : a) {
System.out.print(i +" ");
}
九、直接选择排序
直接选择排序的基本思想是将指定排序位置与其他数组元素分别对比,如果满足条件就交换元素值,注意这里区别冒泡排序,不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换;
实例:
int[] a = { 3, 33, 22, 6, 43, 7, 54 };
int index;
for (int i = 1; i < a.length; i++) {// 循环需要排序几次
index = 0;
for (intj = 0; j <=a.length - i; j++) { // 循环比较找出最大数的坐标
if (a[index] <a[j]) {
index = j;
}
}
int tame;
tame = a[a.length -i];
a[a.length -i] = a[index];
a[index] = tame;
// 把最大数的坐标和每次循环的最后一位坐标替换
}
for (int i : a) { // 输出数组啊
System.out.print(i +" ");
}
十、反转排序
思路:把数组最后一个元素与第一个元素替换,把倒数第二个元素和第二个元素替换,以此类推,直到把所有元素替换过来;
实例:
int[] a = { 1, 2, 3, 4, 5, 6, 7 };
for (int i = 0; i < a.length / 2; i++) { // 循环替换前后需要替换的值
int tame;
tame = a[i];
a[i] =a[a.length - 1 -i];
a[a.length - 1 -i] = tame;
// 替换
}
for (int i : a) {// 输出数组a
System.out.print(i +" ");
}
小结:重点是遍历数组以及使用Arrays类中的各种方法对数组进行操作;
注意:数组的下标是从0开始的,最后一个元素的表示总是"数组名.length-1";