0

リスト内の要素を削除する必要がある場合、以下を使用するよりも優れていますLinkedList:

int j = 0;
List list = new ArrayList(1000000);
...
// fill in the list code here
...
for (Iterator i = list.listIterator(); i.hasNext(); j++) {
    if (checkCondition) {
        i.remove();
        i = list.listIterator(j);
    }
}

?

LinkedListは より効果的に「要素の削除と追加」を行いますが、各要素ArrayListがオブジェクトLinkedListとしてラップされるため、二重リンク リストはより多くのメモリを必要としEntryます。Listインデックスの昇順で実行しているため、一方向のインターフェイスが必要ですが。

4

2 に答える 2

2

答えは、追加と削除の頻度と分布に依存します。まれに単一の削除のみを行う必要がある場合は、リンクされたリストを使用できます。ただし、オーバー aの主なキラーは、一定時間のランダム アクセスです。これは、通常のリンクされたリストでは実際にはできません (ただし、スキップ リストを見てインスピレーションを得てください..)。代わりに、他の要素に関連する要素を削除する場合 (次の要素を削除する必要がある場合)、リンクされたリストを使用する必要があります。ArrayListLinkedList

于 2012-09-29T22:58:04.087 に答える
0

これに対する簡単な答えはありません。

  • 何を最適化するかによって異なります。操作を実行するのにかかる時間や、リストが使用するスペースを気にしますか?

  • リストの長さによって異なります。

  • リストから削除する要素の割合によって異なります。

  • それは、リストに対して行う他のことによって異なります。

これらの決定要因の 1 つ以上が事前に予測できない可能性があります。つまり、あなたは本当に知りません。したがって、私のアドバイスは、今のところこれを延期することです。つまり、直感 (またはコイントス) に基づいてどちらかを選択するだけです。この領域に定量化可能なパフォーマンスの問題がある場合は、後で決定を再検討できます... CPUまたはメモリ使用量のプロファイリングによって示されます。

于 2012-09-30T00:53:24.617 に答える