dataType[] arrayRefVar = new dataType[arraySize];
dataType[] arrayRefVar = {value0, value1, ..., valuek};
深拷贝数组可以通过不仅复制数组本身,还复制数组中的元素来实现。在 Java 中,你可以使用以下几种方法之一来实现深拷贝数组:
使用循环手动复制:
public class DeepCopyExample {
public static void main(String[] args) {
int[] originalArray = {1, 2, 3, 4, 5};
// 创建一个新数组,长度与原数组相同
int[] newArray = new int[originalArray.length];
// 循环复制元素
for (int i = 0; i < originalArray.length; i++) {
newArray[i] = originalArray[i];
}
// 现在newArray是originalArray的深拷贝
}
}
使用 Arrays.copyOf:
import java.util.Arrays;
public class DeepCopyExample {
public static void main(String[] args) {
int[] originalArray = {1, 2, 3, 4, 5};
// 使用 Arrays.copyOf 创建原数组的副本
int[] newArray = Arrays.copyOf(originalArray, originalArray.length);
// 现在newArray是originalArray的深拷贝
}
}
使用 System.arraycopy:
public class DeepCopyExample {
public static void main(String[] args) {
int[] originalArray = {1, 2, 3, 4, 5};
// 使用 System.arraycopy 复制数组
int[] newArray = new int[originalArray.length];
System.arraycopy(originalArray, 0, newArray, 0, originalArray.length);
// 现在newArray是originalArray的深拷贝
}
}
<aside> ⭐ 第一种和第三种方法适用于 newArray 为函数参数
</aside>
Arrays 返回子数组Arrays.copyOfRange(originalArray, startIndex, endIndex);
经过测试:
startIndex ≤ endIndexstartIndex 和 endIndex 必须在索引范围内startIndex == endIndex,则返回的数组长度为 0Arrays 二分(应保证数组升序)基本使用:如果找到元素,直接返回下标
public class BinarySearch {
public static void main(String[] args) {
int[] arr = {1, 3, 5, 7, 9};
System.out.println(Arrays.binarySearch(arr, 3));
}
}
如果元素在数组中不存在:看要查找元素会落在哪个区间上,返回具体的值
以数组 [1, 3, 5, 7, 9] 为例
(-1) 1 (-2) 3 (-3) 5 (-4) 7 (-5) 9 (-6)
第一个元素左边的区间是第一个区间,值为 -1
然后向右递减
例如二分查找 2,2 在 1 和 3 之间,根据上表返回 -2
数字实际上应该插入到哪个 index 上,计算公式:-index - 1
可以指定二分区间
int result = Arrays.binarySearch(arr, startIndex, endIndex + 1, key);
// 返回值规则(以 startIndex = 1, endIndex = 3 为例)
**(-2) 1 (-2)** 3 (-3) 5 (-4) 7 **(-5) 9 (-5)**
使用公式 -index - 1 计算结果,一定在 startIndex, endIndex 范围之内
Arrays 排序