【发布时间】:2016-04-24 13:46:54
【问题描述】:
我有 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) 时间内运行)。
我想知道是否有一种更有效的方法可以将数据添加到更有效的数据结构中并从中减去。
【问题讨论】:
-
如何定义重复项?重复的键或键值对?另外,找到重复项后如何解决冲突?
-
如果我理解正确,您可以使用 add 方法将“可复制”对象添加到 Set。如果使用对象调用 add 返回 false 则该对象是重复的,因此将其存储到单独的集合中。
-
@SergeiLebedev Duplicates 被定义为相同的 key-value paris,所以 "1"->"1" 是重复的,但 "1"->"2" 不是。
-
如果“差异”是指您想要一个未出现在 both 集中的项目列表,那么您能做的最好的事情就是 O(n)。一些数据结构会比其他数据结构更有效,这会减少常数因子,但渐近地说,你不能做得比 O(n) 更好。
标签: java data-structures memory-efficient