Arrays.copyOf从索引0开始复制并可调整长度,适用于全数组或开头截取;Arrays.copyOfRange可指定起始和结束索引,用于精确截取子数组。

Java中
Arrays.copyOf
Arrays.copyOfRange
copyOf
copyOfRange
在我看来,
Arrays.copyOf
Arrays.copyOfRange
Arrays.copyOf
copyOf
System.arraycopy
举个例子,如果你有一个
int[] original = {1, 2, 3, 4, 5};int[] copy = Arrays.copyOf(original, 3);
{1, 2, 3}int[] largerCopy = Arrays.copyOf(original, 7);
{1, 2, 3, 4, 5, 0, 0}而
Arrays.copyOfRange
original
from
to
还是上面的
original
int[] subArray = Arrays.copyOfRange(original, 1, 4);
{2, 3, 4}to
copyOf
import java.util.Arrays;
public class ArrayCopyComparison {
public static void main(String[] args) {
int[] original = {10, 20, 30, 40, 50};
// 使用 Arrays.copyOf
// 从索引0开始,复制3个元素
int[] copyFromStart = Arrays.copyOf(original, 3);
System.out.println("Arrays.copyOf(original, 3): " + Arrays.toString(copyFromStart)); // 输出: [10, 20, 30]
// 从索引0开始,复制比原数组更长的长度,多余部分用默认值0填充
int[] copyAndExpand = Arrays.copyOf(original, 7);
System.out.println("Arrays.copyOf(original, 7): " + Arrays.toString(copyAndExpand)); // 输出: [10, 20, 30, 40, 50, 0, 0]
// 使用 Arrays.copyOfRange
// 从索引1开始 (包含), 到索引4结束 (不包含)
int[] subArraySpecificRange = Arrays.copyOfRange(original, 1, 4);
System.out.println("Arrays.copyOfRange(original, 1, 4): " + Arrays.toString(subArraySpecificRange)); // 输出: [20, 30, 40]
// 从索引2开始 (包含), 到索引7结束 (不包含), 即使7超出了原数组长度
int[] subArrayExpandRange = Arrays.copyOfRange(original, 2, 7);
System.out.println("Arrays.copyOfRange(original, 2, 7): " + Arrays.toString(subArrayExpandRange)); // 输出: [30, 40, 50, 0, 0]
// 尝试复制整个数组,等同于 Arrays.copyOf(original, original.length)
int[] fullCopyRange = Arrays.copyOfRange(original, 0, original.length);
System.out.println("Arrays.copyOfRange(original, 0, original.length): " + Arrays.toString(fullCopyRange)); // 输出: [10, 20, 30, 40, 50]
}
}在我的开发实践中,
Arrays.copyOf
立即学习“Java免费学习笔记(深入)”;
比如,你可能有一个配置项列表,需要将其传递给一个不允许修改原始列表的方法,这时
Arrays.copyOf(originalList, originalList.length)
Arrays.copyOf(oldArray, newCapacity)
从效率上看,
Arrays.copyOf
Arrays.copyOfRange
System.arraycopy
Arrays.copyOf
Arrays.copyOfRange(array, 0, length)
Arrays.copyOfRange
想象一下,你从数据库查询到了一大批数据,存储在一个数组里。但前端页面只需要显示第10条到第20条数据。这时,你就可以用
Arrays.copyOfRange(allData, 9, 20)
from
to
另一个场景是处理文件字节流。你可能读取了一个大文件的所有字节到一个
byte[]
Arrays.copyOfRange
这种灵活性也带来了一点点复杂度,主要是对
from
to
from
to
ArrayIndexOutOfBoundsException
from
to
from
from
Arrays.copyOfRange
to
虽然
Arrays.copyOf
Arrays.copyOfRange
System.arraycopy
首先,这些方法执行的是浅拷贝。这意味着如果你的数组存储的是对象引用(例如
String[]
其次,关于内存分配。每次调用
copyOf
copyOfRange
System.arraycopy
例如,如果你知道目标数组的大小是固定的,并且只需要覆盖其中的一部分:
// 假设 targetArray 已经存在且足够大 System.arraycopy(sourceArray, sourceStart, targetArray, targetStart, length);
这种直接使用
System.arraycopy
最后,边界条件的错误。
from
to
from
from
original.length
to
from
to
original.length
ArrayIndexOutOfBoundsException
if (from < 0 || from > original.length || to < from)
总而言之,理解
Arrays.copyOf
Arrays.copyOfRange
以上就是Java中Arrays.copyOf和Arrays.copyOfRange区别的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号