首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较Java中的两个集合

比较Java中的两个集合
EN

Stack Overflow用户
提问于 2010-11-03 16:50:07
回答 7查看 54.8K关注 0票数 18

我在Java class.The中有两个集合,第一个集合包含以前的数据,第二个集合包含来自上一个集合的更新数据。

我想比较一下这两个集合,但我不确定实现此efficiently.Both集合的最佳方式是否包含相同数量的项。

然后,基于每个集合中的carType相同,我想执行carType方法。

任何帮助我们都将不胜感激

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-11-03 16:59:47

很难帮上忙,因为你没有告诉我们你喜欢如何比较(大小相等)的集合。一些想法,希望其中一个适合:

如果两个集合以相同的顺序包含相同的对象,则会比较这两个集合

代码语言:javascript
复制
Iterator targetIt = target.iterator();
for (Object obj:source)
  if (!obj.equals(targetIt.next()))
    // compare result -> false

如果这两个集合在any order中包含相同的对象,则比较这两个集合

代码语言:javascript
复制
for (Object obj:source)
  if (target.contains(obj))
    // compare result -> false

在其他集合中查找已更改的元素

代码语言:javascript
复制
Iterator targetIt = target.iterator();
for (Object obj:source)
  if (!obj.equals(targetIt.next())
    // Element has changed

根据你的评论,这个算法可以做到这一点。它收集所有已更新的汽车。如果方法结果是一个空列表,则两个集合以相同的顺序包含相同的条目。算法依赖于在Car类型上的equals()的正确实现!

代码语言:javascript
复制
public List<Car> findUpdatedCars(Collection<Car> oldCars, Collection<Car> newCars)
  List<Car> updatedCars = new ArrayList<Car>();
  Iterator oldIt = oldCars.iterator();
  for (Car newCar:newCars) {
    if (!newCar.equals(oldIt.next()) {
      updatedCars.add(newCar);
    }
  }
  return updatedCars;
}
票数 29
EN

Stack Overflow用户

发布于 2014-08-06 23:35:45

从集合算术来看,集合A和B相等的充要条件是A的子集等于B,B的子集等于A。因此,在Java中,给定两个集合A和B,您可以检查它们的相等性,而不需要考虑元素的顺序

代码语言:javascript
复制
boolean collectionsAreEqual = A.containsAll(B) && B.containsAll(A);
票数 18
EN

Stack Overflow用户

发布于 2010-11-03 16:56:53

  • 遍历第一个集合并将其添加到Map<Entity, Integer>中,其中Entity是存储在集合中的类,Integer表示它遍历第二个集合的次数,对于每个元素,尝试在Map中查找它-如果存在,则将Integer值减1,并在找到匹配项时执行任何必要的操作。如果整数值已达到零,则从映射中删除(实体,Integer )条目。

假设您已经实现了一个有效的hashCode()方法,这个算法将在线性时间内运行。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4085353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档