2017-06-08 11 views
0

私は2つのList<Object[]>を持っています。その中の値を比較し、一意の値で最終的なリストを作成する必要があります。2つのリストを比較してください<Object[]> Javaで効率的に

例:

List<Object[]> list1 has n rows of object list with 5 columns 
    [[val1,val2,val3,val4,val5],[val1_,val2_,val3_,val4_,val5_]] 

List<Object[]> list2 has n rows of Object list with 4 columns 
    [[val3_,val4_,val5_,val6_],[val2,val3,val4,val5]] 

list1Object配列の要素の5列目に第二の組成物はlist2Object配列の要素と一致する可能性があります。それらの列がすべて一致すると、それは新しいListで繰り返されるべきではありません。または、新しいリストを使用する代わりに、list1自体の内容を更新することができます。 list2にはlist1がないユニークなものがある場合は、それをリストに追加します。残念ながら、私のプログラムの出力はList<Object[]>にしかなりません。誰かがこの比較を効率的に行う方法を教えてください。

+0

これまでに何を書いていますか?あなたはまた、 'n'行を言うが、' n'の最大数は何ですか?あなたはあらかじめ最適化されているかもしれません...比較に努力してベンチマークを行い、必要があれば改善が必要な箇所を見てください。 –

+1

あなたは値のユニークな組み合わせが欲しいと言っていますか?もしそうなら、たぶんHashSetにそれらを追加し、HashSetでArrayListを構築することができます。これは、(私が質問を理解すれば)一意の値セットを与えるでしょう。オブジェクトは何ですか? – markg

+1

@markg、java配列はequalsを実装していないため、HashSetは機能しません。 –

答えて

0

配列は、equalsまたはhashcodeメソッドを持っていないが、List sが行うので、あなたはHashMapへの鍵としてListを使用することができます。

がキーとして使用するList<Object>を生成する方法を書く:あなたの5要素のリストについて

  • 、それはあなたの4要素のリストについてnew ArrayList(array).subList(1,array.length)
  • だろう、それはnew ArrayList(array)だろうその後

Map map = new HashMap<List<Object>, Object[]>(); 
for(array : fourColumnArrays) { 
    map.put(keyForFourElements(array), array); 
} 
for(array : fiveColumnArrays) { 
    map.put(keyForFiveColumnArrays(array), array); 
} 

mapには、必要な配列が含まれています。

関連する問題