1. ホーム
  2. java

[解決済み] どっちが効率的?System.arraycopyとArrays.copyOfのどちらが効率的ですか?

2023-05-17 18:49:05

質問

質問 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;
}

この2つのコピー方式をどのように比較し、どのような場合にどちらを使うべきでしょうか?

どのように解決するのですか?

違いは 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;
}