我有两份数据副本, 1 代表我的卷, 2 代表我的问题。我必须将 COPY2 与 COPY1 进行比较,找到 COPY2 中缺少的所有元素( COPY1 将始终为超集和 COPY2 可以相等或永远是子集。 现在,我必须在COPY2中获得缺失的卷和问题。 从下图(场景)我得到的结果为: -
问题 -
答案 0 :(得分:2)
我建议单HashSet<VolumeIssue>
。每个VolumeIssue
实例对应一个分类问题,例如1-C
。
在这种情况下,您需要找到差异的是一个电话
copy1.removeAll(copy2);
copy1
中遗漏的内容copy1
中存在的所有问题以及copy2
中遗漏的问题。
请注意,您的VolumeIssue
课程必须正确实施equals
和hashCode
才能实现此目的。
答案 1 :(得分:1)
由于您添加了Guava标记,我会选择Marco Topolnik's answer的变体。不要从另一个中删除一个集合,而是使用Sets.difference(left, right)
返回两组差异的不可修改视图。该 return set包含set1包含的所有元素,而不包含 由set2包含。 set2也可能包含set1中不存在的元素; 这些都被忽略了。返回集的迭代顺序 与set1的匹配。
答案 2 :(得分:0)
我应该使用什么数据结构来存储上述值(卷和问题)?
你可以拥有一个带键和值对的HashMap。
key是Volume,Value是一个问题列表。
我应该如何以最有效的方式在java中实现这种情况,以找到这两个副本之间的差异?
通过从两个HashMap获取值,所以你得到两个List的值。然后找出这两个列表之间的区别。
考虑从两张地图中获得两个具有相同键值的值列表。
现在
Collection<Issue> diff = list1.removeAll( list2 );