1、遍历数组
1)遍历
我们在Java程序基础里介绍了数组这种数据类型。有了数组,我们还需要来操作它。而数组最常见的一个操作就是遍历。
通过for循环就可以遍历数组。因为数组的每个元素都可以通过索引来访问,因此,使用标准的for循环可以完成一个数组的遍历:
2)打印数组内容
直接打印数组变量,得到的是数组在JVM中的引用地址:
int[] ns = { 1, 1, 2, 3, 5, 8 };
System.out.println(ns); // 类似 [I@7852e922
使用for each循环打印也很麻烦。幸好Java标准库提供了Arrays.toString(),可以快速打印数组内容:
Arrays.toString()
3) 小结
-
遍历数组可以使用for循环,for循环可以访问数组索引,for each循环直接迭代每个数组元素,但无法获取索引;
-
使用Arrays.toString()可以快速获取数组内容。
2、数组排序
对数组进行排序是程序中非常基本的需求。常用的排序算法有冒泡排序、插入排序和快速排序等。
1)冒泡排序
我们来看一下如何使用冒泡排序算法对一个整型数组从小到大进行排序:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };
// 排序前:
System.out.println(Arrays.toString(ns));
for (int i = 0; i < ns.length - 1; i++) {
for (int j = 0; j < ns.length - i - 1; j++) {
if (ns[j] > ns[j+1]) {
// 交换ns[j]和ns[j+1]:
int tmp = ns[j];
ns[j] = ns[j+1];
ns[j+1] = tmp;
}
}
}
// 排序后:
System.out.println(Arrays.toString(ns));
}
}
冒泡排序的特点是,每一轮循环后,最大的一个数被交换到末尾,因此,下一轮循环就可以“刨除”最后的数,每一轮循环都比上一轮循环的结束位置靠前一位。
实际上,Java的标准库已经内置了排序功能,我们只需要调用JDK提供的Arrays.sort()就可以排序:
必须注意,对数组排序实际上修改了数组本身。例如,排序前的数组是:
对数组排序实际上修改了数组本身
2) 小结
-
常用的排序算法有冒泡排序、插入排序和快速排序等;
-
冒泡排序使用两层for循环实现排序;
-
交换两个变量的值需要借助一个临时变量。
-
可以直接使用Java标准库提供的Arrays.sort()进行排序;
-
对数组排序会直接修改数组本身。
3、多维数组
1)二维数组
二维数组就是数组的数组。
因为ns包含3个数组,因此,ns.length为3。实际上ns在内存中的结构如下:
二维数组的每个数组元素的长度并不要求相同,例如,可以这么定义ns数组:
或者使用Java标准库的Arrays.deepToString():
2)三维数组
三维数组就是二维数组的数组。
3) 小结
-
二维数组就是数组的数组,三维数组就是二维数组的数组;
-
多维数组的每个数组元素长度都不要求相同;
-
打印多维数组可以使用Arrays.deepToString();
-
最常见的多维数组是二维数组,访问二维数组的一个元素使用array[row][col]。
4、命令行参数
Java程序的入口是main方法,而main方法可以接受一个命令行参数,它是一个String[]数组。
这个命令行参数由JVM接收用户输入并传给main方法:
小结
-
命令行参数类型是String[]数组;
-
命令行参数由JVM接收用户输入并传给main方法;
-
如何解析命令行参数需要由程序自己实现。