数组基本操作
一维数组
创建数组
两种常用方式:
- 初始化固定大小的数组,后再重新赋值。若不重新赋值,则数组中元素值为对应dataType的默认值。
dataType[] array = new dataType[size];
array[0] = value0;
array[1] = value1;
……
array[size-1] = value;
- 创建时赋值
dataType[] array = {value0, value1, ……, valuek };
读取第i个元素
dataType[] var = array[i];
获取数组长度
int len = array.length;
遍历数组
- for循环
for(int i = 0; i < array.lenght; i++){
system.out.println(array[i]);
}
- for-each循环
for (int i : array){
system.out.println(i);
}
数组作为参数传入/返回值返回
public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1; i < list.length; i++, j--) {
result[j] = list[i];
}
return result;
}
int[] arrayResult = reverse(new int[]{1, 2, 3, 4, 5});
二维数组
创建数组
- 直接为每一维分配空间
dataType[][] array = new dataType[rowLength][columnLength];
- 从最高维开始,分别为每一维分配空间
dataType[][] array = new dataType[rowLength][];
array[0] = new dataType[2];
array[1] = new dataType[3];
array[0][0] = new dataType(value0);
array[0][1] = new dataType(value1);
获取行号和列号
int row = array.length;
int column = array[0].length;
遍历
- 按行遍历
for (int i = 0; i < row; i++){
for (int j = 0; j < column; j++){
system.out.println(array[i][j]);
}
}
- 按列遍历
for (int i = 0; i < column; i++){
for (int j = 0; j < row; j++){
system.out.println(array[i][j]);
}
}
Arrays 类
java.util.Arrays 类能方便地操作数组,它提供的所有查找排序等方法都是静态的。
数组间比较
如果两个数组以相同顺序包含相同的元素,则返回true,否则false。
Arrays.equals(array1, array2);
数组转字符串
Arrays.toString(array1);
按升序排序
Arrays.sort(array1);
二分法查找定值对象
能对排序好的数组进行二分查找法操作。若查找到,返回查找值索引;若未查找到,返回- 1 (插入点) 。
Arrays.binarySearch(array1, value1);
示例
int[] array1 = {1, 25, 17, 31, 48};
int[] array2 = {25, 48, 1, 17, 31};
System.out.println("array1和array2是否相等:"+ Arrays.equals(array1, array2)); // 判断是否相等
System.out.println("array1:" + Arrays.toString(array1)); //数组转字符串
Arrays.sort(array1); //排序
System.out.println("array1排序后:" + Arrays.toString(array1));
System.out.println("array1中值17的索引:" + Arrays.binarySearch(array1, 17)); // 二分法查索引
System.out.println("array1中值3的索引:" + Arrays.binarySearch(array1, 3)); //-插入点-1
输出
array1和array2是否相等:false
array1:[1, 25, 17, 31, 48]
array1排序后:[1, 17, 25, 31, 48]
array1中值17的索引:1
array1中值3的索引:-2
双指针应用
情景一:从两端向中间迭代数组
一个指针从头部开始,而另一个指针从尾部开始。
情景二:原地修改数组
- 使用快慢指针的指针来解决问题。
- 两个指针的运动方向是相同的。
其他
在做题过程中,我发现大多数是对int类型数组操作,可能会用到一些Math类中方法,大概这几种:
- Math.min(value1, value2) 返回两个参数中的最小值。
- Math.max(value1, value2) 返回两个参数中的最大值。