比较Java中的两个Collection


问题内容

我在Java类中有两个Collections。第一个集合包含先前的数据,第二个集合包含先前集合的更新数据。

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

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

任何帮助表示赞赏


问题答案:

很难帮助,因为你没有告诉我们 如何 你想比较(大小相等)的集合。一些想法,希望能适合:

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

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