数组遍历
数组元素下标的合法区间:[0,length-1]。我们可以通过下标来遍历数组中的元素,遍历时可以读取元素的值或者修改元素的值。
使用for循环
int[] nums = new int[4];
for (int i = 0; i < nums.length; i++) {
nums[i] = 100 * i;
}
System.out.println(Arrays.toString(nums)); // [0, 100, 200, 300]
优点
- 可以访问元素的索引位置
- 可以反向遍历(
i--) - 可以跳着遍历(
i += 2) - 可以修改数组元素
缺点:
- 代码相对冗长
使用foreach
Java 5 引入的语法,更简洁,但无法获取当前元素的索引;
int[] nums = {1, 2, 3};
for(int num: nums) {
System.out.println(num);
}
优点:
- 语法简洁,易读
- 不需要处理索引,避免越界错误
缺点:
- 无法获取当前元素的索引
- 无法修改数组长度(但可以修改元素值,对于引用类型)
- 只能顺序遍历
数组拷贝
System.arraycopy(object src, int srcpos, object dest, int destpos, length)
以上解释就是将src数组从第srcpos位置开始,将length长度个元素赋值给dest数组,从第destpos开始赋值;
int[] nums = {1, 200, 4, 2, 300};
int[] newNums = new int[6];
System.arraycopy(nums, 0, newNums, 0, nums.length);
System.out.println(Arrays.toString(newNums)); // [1, 200, 4, 2, 300, 0]
Java.until.Arrays类
Arrays类包含了:排序、查找、填充、打印内容常见的数组操作
示例:打印功能Arrays.toString
int[] nums = {1, 200, 4, 2, 300};
System.out.println(nums); // [I@1edf1c96
System.out.println(Arrays.toString(nums)); // [1, 200, 4, 2, 300]
以上打印数组([I@1edf1c96)的原因是:因为Java中所有对象都继承自Object类,而数组调用toString()方法时,默认实现返回的是表示对象地址的字符串,而不是数组内容。
所以可以使用Arrays.toString方法,注意:这里的toString属于Arrays类的一个静态方法;不是Object的toString方法
示例:排序功能Arrays.sort
int[] nums = {1, 200, 4, 2, 300};
Arrays.sort(nums);
System.out.println(Arrays.toString(nums)); // [1,2,4,200,300]
示例:二分法查找
int[] nums = {1, 200, 4, 2, 300};
Arrays.sort(nums); // 使用二分查找,必须先排序
System.out.println(Arrays.binarySearch(nums, 200)); //3; [1,2,4,200,300] 的第3个位置是200
binarySearch返回排序后新的索引位置,若未找到返回负数。
示例:使用Arrays类对数组进行填充
int[] nums = {1, 200, 4, 2, 300};
System.out.println(Arrays.toString(nums));
Arrays.fill(nums, 1, 3, 100); // 将nums中1~3位置元素替换为100
System.out.println(Arrays.toString(nums)); // [1, 100, 100, 2, 300]
fill(1,3) 含头不含尾,即替换1,2位置;3位置不替换;