在 Java 中比较两个集合

2022-09-02 19:20:14

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

我想比较这两个集合,但我不确定有效实现这一点的最佳方法。两个集合将包含相同数量的项目。

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

任何帮助是值得赞赏的


答案 1

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

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

Iterator targetIt = target.iterator();
for (Object obj:source)
  if (!obj.equals(targetIt.next()))
    // compare result -> false

如果两个集合按任意顺序包含相同的对象,则比较它们

for (Object obj:source)
  if (target.contains(obj))
    // compare result -> false

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

Iterator targetIt = target.iterator();
for (Object obj:source)
  if (!obj.equals(targetIt.next())
    // Element has changed

根据您的评论,此算法将执行此操作。它收集所有已更新的汽车。如果方法结果为空列表,则两个集合包含相同顺序的相等条目。该算法依赖于 类型的正确实现!equals()Car

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;
}

答案 2

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

boolean collectionsAreEqual = A.containsAll(B) && B.containsAll(A);