1

ジェネリック オブジェクト タイプ、つまりリスト キューの ArrayList があります。配列リストとリストオブジェクトを入力として取り、古い配列リストとリストオブジェクトの要素を含む別の配列リストを返しますが、渡された元の配列リストには影響を与えない関数 EnqueueModified を書きたいと思います。つまり、配列リストの新しいコピーに対してエンキュー操作を実行し、返す必要があります。

これは次のように行うことができます。

    public List<E> EnqueueModified(E e, List<E> queue) {
    List<E> clone = new ArrayList<E>(queue);
    clone.add(e);
    return clone;

}

しかし、これを行うためのより良い方法はありますか? コピー コンストラクターを使用する代わりに、リストのコピーを作成するより高速な方法はありますか? 汎用リストをサポートしていないため、クローニングを使用できません。

4

1 に答える 1

2

リストをコピーするには、新しいリストを作成し、古いリストの項目を入力する必要があります。

ただし、使用しているコンストラクターは、実際には最適なオプションではない可能性があります。ソース コード (google arraylist ソース コード) を確認すると、古いコレクションの要素とまったく同じ大きさの配列が作成されていることがわかります。

次に、その配列に要素を追加します。配列が小さすぎるため、配列のコピーをもう 1 つ作成し、少しだけ大きくして、要素をそこに移動する必要があります。

を使用すると、より良いパフォーマンスを得ることができます

clone = new ArrayList(queue.size() + 1);
clone.addAll(queue);
clone.add(e);

また、メソッド名は小文字で始める必要があります。したがって、次を使用します: enqueueModified(...)

于 2013-11-07T14:05:52.637 に答える