java 核心技术卷I学习记录(三)
接上次记录的数组未完成部分。
数组
- for each 循环
语法格式为:
for (varibable : collection) statement
variable : 是定义的一个用于暂存集合中每一个元素。
collection : 一个数组或者是实现了Iterable接口的类对象(例如是ArrayList
for each 语句的好处就在于语法简洁,更不容易出错(不必为下标的起始值和终止值而操心)
数组初始化:
int[] smallPrimes = {2,3,4,5};
int intArray = new int[100];
new int[] = {17,19,21,23};//初始化一个匿名函数
smallPrimes = new int[] {7,8,9,10};//在不创建新变量的情况下重新初始化一个数组
注意: 在java中,是允许数组长度为0的。在编写一个结果为数组的方法时,如果碰巧结果为空,则这种语法形式就显得特别有用。此时可以创建一个长度为0的数组:
new elementType[0]
.但是要注意的是数组长度为0与null不同。
- 数组拷贝
int [] smallPrimes = {2,4,6,8,10};
int [] luckNumbers = smallPrimes;
以上代码中smallPrimes 和 luckNumbers 实际上是引用的是同一个数组。
如果在实际需求中真的需要将一个数组拷贝到一个新的数组中时,可以使用Arrays类的copyOf方法。那么以上代码就可以改写为:
luckNumbers = Arrays.copyOf(smallPrimes,smallPrimes.length)
,但是这个方法多用于拓展数组的大小。在使用时就是讲数组的长度变大就可以了,如果整形数组的话,那么多余的元素将会被赋值为0,如果数组元素是bool型则将被赋值为false。相反如果长度小于原始数组的长度,则只拷贝最前面的数据元素。
在java main 函数中都带一个String arg[]参数,是因为main方法要接收一个字符串数组,这个字符串数组就是命令行参数。在执行java程序是可以在后面添加参数,如java Message -g cruel world
,使用java命令执行Message 类,如果在main方法中输出args的内容时,就会发现args数组中包含args[0]:"-g“,args[2]:“cruel”,args[3]:"world"
- 数组排序
对数值型的数组排序时,可以使用Arrays类中的sort方法,sort方法是使用优化的快速排序算法。
int [] smallPrimes = {2,4,5,10,23,444};
Arrays.sort(smallPrimes);
for (int a: smallPrimes) {
System.out.println(a);
}
数组的相关API可去查阅java 开发文档
- 多维数组
多维数组在使用foreach 循环时,是按照行来处理的,所以要访问二维数组a的所有元素,需要使用两个嵌套循环。例如:
for (double[] row : a)
for (double value : row)
something to do
要想快速的打印一个二维数组的数据元素列表,可以使用 system.out.println(Arrays.deepToString(a))
假设有一个array[10][6]的数组,在使用double[][] array = new double[10][6]进行初始化时,java时分配了一个包含十个指针的数组,然后指针数组的每一个元素被填充了一个包含6个数字的数组