2016-04-24 44 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

你如何定义重复?重复的键或键值对?另外,如何在找到重复项目后解决冲突? –

+0

如果我理解你正确,你可以使用add方法将你的“可复制”对象添加到Set。如果使用对象添加调用返回false,则该对象是重复的,因此将其存储为单独的集合。 – Ilya

+0

@SergeiLebedev重复被定义为相同的键值巴黎,所以“1” - >“1”是重复的,但是“1” - >“2”不是。 – ocp1000

回答

0

如果您只是想将您的数据放入未排序的Collection中,则可以使用HashSet,如果您想将其排序,则可以使用TreeSetTreeSet需要一个类实现Comparable虽然 - 如果你只是使用字符串或整数,你应该没问题。你可以找到更多的信息在Java Doc: Set

+0

我没有提及我的数据必须采用键值对格式。将它存储在Set >比List 更有效吗? – ocp1000