0

どちらも整数値を含む2 つのArrayListがあります。私の目的は、これら 2 つのリストを比較して同一/共通/重複値を取得することです。言い換えると (SQL 用語で)、2 つのリストのINTERSECT結果、つまり両方のリストに表示される値が必要です。

例:

ArrayList<Integer> list1 = new ArrayList<Integer>();
list1.add(100);
list1.add(200);
list1.add(300);
list1.add(400);
list1.add(500);

ArrayList<Integer> list2 = new ArrayList<Integer>();
list2.add(300);
list2.add(600);

私が考えることができる実装/ソリューションの1つの種類は、次のようなリストの1つをループすることです:

ArrayList<Integer> intersectList = new ArrayList<Integer>();

for (Integer intValue : list1) 
{
    if(list2.contains(intValue))
        intersectList.add(intValue);
}

この場合、 には、追加される整数項目がintersectList1 つだけ含まれます。つまり、両方のリストに表示されます。300

私の質問は、このロジックを実装するためのより良い/最速/効率的な方法はありますか? Apache Commonsライブラリで利用できるオプションはありますか? その他のアイデア/提案/コメントは大歓迎です。

注:説明のために、ここでは 5 つのアイテムと、リストに追加される 2 つのアイテムを示しています。私のリアルタイム実装では、各リストに 1000 を超える要素があります。したがって、パフォーマンスも考慮すべき重要な要素です。

4

3 に答える 3

4

list1 の結果を上書きしても問題ない場合:

list1.retainAll(list2);

それ以外の場合は、最初に list1 を複製/コピーします。

ただし、パフォーマンスについてはわかりません。

于 2012-07-13T10:29:21.547 に答える
0
list1.retainAll(list2)//for intersection
于 2012-07-13T10:31:19.190 に答える
0

既存のリストを変更したくない場合は、org.apache.commons.collections の ListUtils を使用してください。

ListUtils.intersection(list1, list2)

于 2014-09-22T09:08:32.410 に答える