2016-04-24 6 views
0

私は2つのソースからデータを読み込みました。そのデータは重複する可能性があり、2つのコレクションを互いに引き算することによってこれらの重複を検出する必要があります。 現在、私はList<Map<String, String> duplListを使用するので、私は重複した値を挿入する場合:重複したアイテムを保持/追加/削除するための効率的なデータ構造

Map<String, String> map1 = new HashMap(); 
map1.put("1", "1"); 
map1.put("1", "1"); 
map1.put("1", "1"); 
duplList.add(map1); 

Map<String, String> map2 = new HashMap(); 
map2.put("1", "1"); 
map2.put("1", "1"); 
duplList.add(map2); 

、後でそれらを引く:

Collection diff1 = CollectionUtils.subtract(map1, map2); 
Collection diff2 = CollectionUtils.subtract(map2, map1); 

を私はMAP1とMAP2との間の差を含むオブジェクトを取得します。
これは機能しますが、O(n)時間で実行されるので、私にとってはそれほど効率的ではないようです。

もっと効率的なデータ構造にデータを追加したり減算したりするより効率的な方法があるのだろうかと思いました。

+0

重複をどのように定義しますか?重複キーまたはKey-Valueペア?また、重複が見つかった後でどのように競合を解決するのですか? –

+0

あなたが理解している場合は、addメソッドを使用してSetに "duplicable"オブジェクトを追加することができます。オブジェクトを持つaddの呼び出しがfalseを返した場合、そのオブジェクトは重複しているので、それを別々のコレクションに格納します。 – Ilya

+0

@SergeiLebedev重複は同じKey-Value parisとして定義されているため、 "1" - > "1"は重複しますが、 "1" - > "2"は重複しません。 – ocp1000

答えて

0

ソートされていないコレクションにデータが必要な場合はHashSetを使用できます。ソートする場合はTreeSetを使用できます。 TreeSetには、Comparableを実装するクラスが必要ですが、文字列や整数で作業する場合は上手くいくはずです。詳細はこちらJava Doc: Set

+0

私のデータはキーと値のペア形式でなければならないと言及しませんでした。 List >よりSet >に格納する方が効率的でしょうか? – ocp1000

関連する問題