1

重複した値を から削除することについてはよく読みましたが、別のリストで実際に重複している値を維持listsすることについては何も知りませんでした。私の問題を説明しようとします:

DB からいくつかの値を読み取り、検索条件に一致するすべてのエントリ (整数エントリ) を保存する必要があります。この操作はループ操作であるため、n回実行されます。返されるオブジェクトは、リスト (または ArrayList、または私の目的に最も適したリスト実装) でなければなりません。

明確にするために、いくつかの擬似コード

for (int i=0; i<nElements; i++) {

    tempList = getEntriesFromDb(i);

    if (i==0)
     result=tempList;

    else 
     //this is where I should maintain those entries that are in fact duplicated
     // in both tempList and result
     result = maintainDuplicates(result,tempList);

    }

retun result;

私の問題に対するいくつかの提案を知りたいです。問題は、リストからすべてのエントリを抽出する新しいループを作成し、(3 番目の!!)テンポラル リストを作成してそこに保存するなどです。私の実装。

事前に感謝します。

4

4 に答える 4

3

ここでの重要な操作は、あるリストの各要素を別のリストから検索することです。これは、動作が遅くなる可能性があります。リストが長くなる可能性がある場合は、1 つのリストのすべての要素を含む HashSetworkingHashを作成してから、もう 1 つのリストで keepAll(workingHash) を実行することをお勧めします。

于 2013-07-17T13:35:12.203 に答える
1

並べ替えられたコレクションを比較するために、TreeSetorのような並べ替えられたコレクションを使用する必要があります。TreeMap次に、並べ替えられた順序で、2 つのコレクションを並べ替えると、2n 時間 (o(n) 時間) で重複する要素を見つけるのに役立ちます。

たとえば、DB結果が1,3,5,7,9,11,13,15あり、tempListが次の2 5 8 11場合

DB 結果と tempList の繰り返しを同時に開始できます。最初の要素 1-2 から開始します。したがって、1 は存在しtempListないため、1 は重複しません。比較と結果はこのようになります。

1-2 削除 1. DB結果要素が要素より小さいのでtempList、次のDB結果要素を取得

3-2 削除しないでください。tempList 要素が DB 結果要素より小さい場合、次のtempList 要素を取得するなど

3-5 削除 3. DB結果要素が要素より小さいのでtempList、次のDB結果要素を取得

5-5 両方とも同じなので、両方の次の要素に移動します。

7-8 DB結果要素が要素より小さいのでtempList、次のDB結果要素を取得する

9-8 削除しないでください。tempList 要素が DB 結果要素より小さい場合、次のtempList 要素を取得するなど

9-11 削除 9. DB結果要素が要素より小さいのでtempList、次のDB結果要素を取得

11-11 両方とも同じなので、両方の次の要素に移動します。

したがって、これが結果として 5,11 を取得する方法です。

于 2013-07-17T13:55:22.737 に答える
0

これを使って:

result.retainAll(tempList);
于 2013-07-17T13:57:58.970 に答える