10

会社の筆記試験でJavaのArrayListに関する質問を見つけました。私の質問は、実際の質問のほんの一部です。

ある ArrayList を別の ArrayList にコピーする次の関数があるとします。

void function(List<E> l)
{
    List<E> m = new ArrayList<E>(l);
}

質問は基本的に、このコピー操作を最適化することを求めています。リストには、100 万のエントリが含まれる場合があります。私は次のアプローチを試しました:

Collections.copy

System.Arraycopy

全て追加する

しかし、これらはすべて、指定された方法よりも遅いようです。指定された方法よりも高速な方法が必要ですか、それとも利用可能な最良の方法ですか?

4

2 に答える 2

5

まず、ベンチマークエラーがあると思います。内部で使用public ArrayList(Collection<? extends E> c)するものを使用します(ソースはこちら)。したがって、言及されたコードよりも遅くなることはありません。Arrays.copyOfSystem.arraycopySystem.arraycopyaddAll

質問については、操作がO(n). そしてSystem.arraycopy、ネイティブ呼び出しを使用してそれらを高速にコピーすることを考えると、最速の方法です。

于 2013-11-04T17:50:18.343 に答える
0

汚れたらUnsafeの方が少し速くなります。ただし、リフレクションを使用して、ArrayLists の基になる Object 配列にアクセスする必要があります。これは、パフォーマンスに関して生死にかかわる状況にある場合にのみ使用してください。

public native void copyMemory(java.lang.Object o, long l, java.lang.Object o1, long l1, long l2);

于 2013-11-04T19:56:41.117 に答える