まず、私は長い答えのために私の謝罪をしています。いつでも私が間違っていたら、いつでも私を訂正することができます。あなたがArrayList.removeAll
メソッドを使用してコードで
のremoveAll
のソースコードのコードに見ることができます:ここで私は解決策
OPTION 1 < ArrayListには>解決のいくつかのオプションを比較していますremoveAll
public boolean removeAll(Collection<?> c) {
return batchRemove(c, false);
}
はそうbatchRemove
方法であるかを知る必要があります。ここはlinkです。ここで重要な部分あなたが
for (; r < size; r++)
if (c.contains(elementData[r]) == complement)
elementData[w++] = elementData[r];
を見ることができる場合は、今indexOf
方法の単なるラッパーであるcontains
方法を検討することができます。 link。 indexOfメソッドには、O(n)操作があります。(ここで注意する部分だけ)すべての上だから、
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
はそれがremoveAll
OPTIONで
はO(n^2)
操作で2 < HashSet>: 以前ここに何か書きましたが、私はいくつかのpoinに間違っていたようですこれを取り除く。ハッシュセットについての専門家からの提案をうまく活用してください。あなたの場合、hashmapがより良い解決策になるかどうかはわかりません。だから私は>
OPTION 3 <私の提案あなたが試すことができ、別の解決策を提案しています:
ステップ1:をあなたのデータは、その後、他のこのステップの必要はあなたが差し引きますリストをソートしないソートされている場合(第2のリスト)
ステップ2:未分類リストのすべての要素のためのは、第二のリスト
ステップ3でバイナリ検索を実行します:は一致が見つからない場合は、別の結果リストに保存するが、一致が見つかった場合、その後
ステップ4追加していけない:
:結果リストは、オプション3のあなたの最終的な答え
コストですステップ1:ソートされていない場合O(nlogn)
時間
ステップ2:O(nlogn)
時間
ステップ3:O(n)
空間
**
ので全体O(nlogn)時間とO(n)の空間
**