2012-04-08 13 views
1

次の問題の解決策を見つけるために私の心が壊れています。 私はデータベースからそれらの値を取得する4種類のArrayListを持っています。 サイズは0(含む)から今までのものまでです。 各リストのサイズと値が異なる可能性があります。私は効果的にやろうとしています何 は次のとおりです。 すべての非0のサイズのリストを比較して、彼らはいくつかの共通の整数を持っており、それらの値がどのようなものかどうかを確認します。ArrayListを比較して共有値を取得

アイデア? ありがとうございました!

答えて

6

あなたが空のものを除く、すべてのための共通の整数の集合が必要な場合:

List<List<Integer>> lists = ... 
Collection<Integer> common = new HashSet<Integer>(lists.get(0)); 
for (int i = 1; i < lists.size(); i++) { 
    if (!lists.get(i).isEmpty()) 
    common.retainAll(lists.get(i)); 
} 

終わりcommonは、それらのすべてのための共通の整数が含まれています。

+1

リストの1つが空の場合、これは機能しますか?空の場合は、残りのリストに共通の値がないかどうかを知る必要があります。 – Vagelism

+1

あなたは何を必要としますか?すべてのリストにある一般的な整数、または整数の集合です。それぞれの整数は少なくとも2つ共通です。 –

+0

リストの3私は、共通の価値があるかどうかを知りたい値を持っている場合them.For例と比較する必要はありません、彼らが値を持っていけないvalues.Ifを持っているすべてのリストのために共通しているだけで、整数のみそのうちの3つで、この価値は何ですか。 – Vagelism

2

あなたは2つのコレクションの交点を取得するにはApacheのコモンズCollectionUtils.intersection()を使用したいという場合もあるでしょう...

反復的交差点を生成し、作業が完了したときに、それが空でない場合 - あなたは、共通の要素を持っており、この結果のコレクションに含まれています。空のリストについて

:ちょうどそのsize()が0であるかどうかを確認し、それがある場合 - このリストをスキップします。

0

これは可能です。検索するエレメントが複数ある場合は、検索をループに入れます。

一覧aListの=新しいArrayListを(); aList.add(新しい整数(1));

があれば(!!alistが= nullの& & aList.isEmpty()){ があれば(aList.containsは、(1)){System.out.printlnは は( "それを得ました"); }

2

ArrayListオブジェクトで交差操作を設定することができます。このような

何か:今

List<Integer> l1 = new ArrayList<Integer>(); 

l1.add(1); 
l1.add(2); 
l1.add(3); 

List<Integer> l2= new ArrayList<Integer>(); 
l2.add(4); 
l2.add(2); 
l2.add(3); 

List<Integer> l3 = new ArrayList<Integer>(l2); 
l3.retainAll(l1); 

、L3はL1とL2の間の唯一の共通の要素を持っている必要があります。

+0

2つのリストは簡単ですね!今では4があると私たちは魔女が値を持っているかどうかわからないのですか? – Vagelism