第七章
7.1引言
7.2 数组的基础知识
声明数组变量
elementType[] arrayRefVar
创建数组
elementType[] arrayRefVar = new elementType[arraySize];
给数组元素赋值
arrayRefVar[index] = value;
数组初始化(1行代码完成以上3条内容)
elementType[] arrayRefVar = {value0, value1, ..., valuek};
访问数组元素
arrayRefVar[index];
获取数组大小
arrayRefVar.length
一个数组变量看起来是储存了一个数组,但它实际上储存的是指向该数组的引用:一个含有index个元素数组的引用变量
创建数组以后的元素会被赋予默认值,数值型基本数据类型默认值0,char默认\u0000,boolean默认false
数组经常和for循环用在一起,因为数组中每个元素的类型都是一样的,而且我们明确的知道数组的个数
foreach循环顺序遍历数组,以下代码可以读做,对数组arrayRefVar中的每个元素element进行如下操作
for (elementType element: arrayRefVar) {
//process the element
}
7.3 示例学习 分析数字
7.4 示例学习 一副牌
7.5 数组的复制
赋值语句可以复制基本数据类型的变量,但是不能复制数组,赋值语句只改变数组变量的指向,无法被指向的数组会被JVM垃圾回收
赋值数组目前有2种办法
1 ) 使用循环语句逐个地复制数组的元素。
2 ) 使用System类中的静态方法 arraycopy。
System.arraycopy(sourceArray, srcPos, targetArray, tarPos, length)
7.6 将数组传递给方法
当将一个数组传递给方法时,数组的引用被传给方法。
将数组传递给方法,虽然数组和方法在栈中拥有不同的储存地址,但是他们所储存的都是数组的引用,真正的数组在堆中(数组在 Java 中是对象,JVM 将对象存储在一个叫堆的内存区域中,用于动态内存分配),改变了堆中的数组,那么数组的引用也就都会变化
7.7 从方法中返回数组
当从方法中返回一个数组时,数组的引用被返回。
可以使用reverse方法反转数组
int[] list1 = {1,2,3,4,5,6};
int[] list2 = reverse(list1);
7.8 示例学习:统计每个字母出现的次数
7.9 可变长参数列表
在方法的参数列表中,可以使用typeName… paraterName来表示数量可变的参数数组,一个方法只能有一个可变参数,且常规参数必须在可变参数之前。
7.10 数组的查找
线性查找法:相当于遍历数组
二分查找法:在有序数组中使用二分法进行查找
7.11 数组的排序
选择排序:不断找到数列中最小的数字,把它交换到数列的第1,2,3,n位
7.12 Arrays类
排序
sort(arrayName)
sort(arrayName, searchStartIndex, searchEndIndex)
parallelSort(arrayName)
parallelSort(arrayName, searchStartIndex, searchEndIndex)
查找
binarySearch(arrayName, key)
相等
equals(array1, array2)
填充
fill(arrayName, fillContent)
fill(arrayName, fillStartIndex, fillEndIndex, fillContent)
打印
toString(arrayName)
7.13命令行参数
可以向main方法的args数组传递参数
给main方法传递参数时,解释器会创建一个如下的数组(如果运行程序时没有传递字符串 ,那么使用new String[0] 创建数组。在这种情况下,该数组是长度为0的空教组。args是对这个空数组的引用。因此,args不是null, 但是args.length是0。)
args = new String[n];
注:在命令行中,除含有空格外,字符串不需要使用双引号标注