当前位置: 首页 > 面试题库 >

什么是更有效的:System.arraycopy或Arrays.copyOf?

孙夕
2023-03-14
问题内容

Bloch中的toArray方法ArrayList同时使用System.arraycopyArrays.copyOf复制一个数组。

public <T> T[] toArray(T[] a) {
    if (a.length < size)
        // Make a new array of a's runtime type, but my contents:
        return (T[]) Arrays.copyOf(elementData, size, a.getClass());
    System.arraycopy(elementData, 0, a, 0, size);
    if (a.length > size)
        a[size] = null;
    return a;
}

如何比较这两种复制方法,何时应使用哪种复制方法?


问题答案:

同之处在于Arrays.copyOf不仅复制元素,还创建新的数组System.arraycopy复制到现有阵列中。

这是的来源Arrays.copyOf,你可以看到它在System.arraycopy内部用于填充新数组:

public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
    T[] copy = ((Object)newType == (Object)Object[].class)
        ? (T[]) new Object[newLength]
        : (T[]) Array.newInstance(newType.getComponentType(), newLength);
    System.arraycopy(original, 0, copy, 0,
                     Math.min(original.length, newLength));
    return copy;
}


 类似资料:
  • 问题内容: Java的标准库似乎使用camelCase作为方法名称。诸如此类的本 机 功能也不例外。 如果是这样,为什么 不驼峰? 有什么特别的吗? 问题答案: 它已经在Java中的1.0版本发布之前-所以我的猜测是,它早于命名约定,它是在API的横扫无缘当命名约定 进行 确定。 (在其他新闻中,应称为。)

  • 问题内容: 什么是i 或 i效率更高? 我只在Java和C / C ++中使用了此语言,但是我实际上是在要求实现此语言的所有语言。 在大学里,我有一位教授向我们展示了++ i效率更高,但这已经有几年了,我想从Stack Overflow社区中获取意见。 问题答案: i ++: 创建我的临时副本 增加我 返回临时副本 ++ i: 增加我 还给我 启用优化后,最终的程序集很可能是相同的,但是++ i效

  • 问题内容: 复制整个数组时,我经常看到人们写: 但是在我看来,没有理由对此表示赞同: 无论如何,它们都是浅表副本。这些人可能只是不知道存在。那么有什么理由不使用吗? 问题答案: 否。 如果您 确实要进行微 基准测试,则可能取决于您正在运行的JVM。但是实际上,没有。

  • 问题内容: 我目前正在决定要在其上构建科学计算产品的平台,并且正在决定在Core2 Quad CPU上使用C#,Java或带有Intel编译器的纯C语言。它主要是整数运算。 到目前为止,我的基准测试表明Java和C彼此差不多,并且.NET / C#落后大约5%,但是我的许多同事都声称经过适当的优化的.NET将在足够的时间上击败这两个方面。供JIT开展工作。 我一直以为JIT会在应用启动后的几分钟内

  • 问题内容: 什么是最有效的Java Collections库? 几年前,我做了很多Java的工作,给人留下的印象是那个宝库是最好(最有效)的Java Collections实现。但是,当我阅读“最有用的免费Java库? ”这个问题的答案时,我注意到几乎没有提到trove。那么,哪个Java Collections库现在最好? 更新:为澄清起见,我主要想知道当我必须在哈希表等中存储数百万个条目时使用

  • 我已经实现了32位单精度浮点加法/减法、乘法、余弦、正弦、除法、平方根和范围缩小,所有这些都是在这个体系结构上的软件。 为了实现余弦和正弦,我首先使用了范围约简,使用了K.C.在论文“大参数的参数约简”中描述的方法。NG I然后实现了一个余弦和正弦函数,这是余弦和正弦函数在-pi/4到+pi/4范围内的多项式逼近。我参考了哈特等人的《计算机近似值》一书。对于多项式。 我也听说我应该考虑CORDIC