相关疑难解决方法(0)

如何计算两个ArrayLists之间的差异?

我有两个ArrayLists.

ArrayList A包含

['2009-05-18','2009-05-19','2009-05-21']
Run Code Online (Sandbox Code Playgroud)

ArrayList B包含 ['2009-05-18','2009-05-18','2009-05-19','2009-05-19','2009-05-20','2009-05-21','2009-05-21','2009-05-22']

我必须比较ArrayLst A和ArrayLst B. 结果ArrayList应该包含ArrayList中不存在的List .AllList结果应该是

[ '2009-05-20', '2009-05-22']

怎么比较?

java arraylist

79
推荐指数
6
解决办法
13万
查看次数

如何最好地比较Java中的两个集合并采取行动?

我有两个相同对象的集合,Collection<Foo> oldSetCollection<Foo> newSet.所需的逻辑如下:

  • 如果foo是(*)oldSet但不是newSet,请致电doRemove(foo)
  • 否则,如果foo不在,oldSet但在newSet,呼叫doAdd(foo)
  • 否则,如果foo在两个集合中但已修改,请调用doUpdate(oldFoo, newFoo)
  • 否则,如果!foo.activated && foo.startDate >= now,打电话doStart(foo)
  • 否则,如果foo.activated && foo.endDate <= now,打电话doEnd(foo)

(*)"in"表示唯一标识符匹配,不一定是内容.

目前的(传统)的代码做了很多比较,以计算出removeSet,addSet,updateSet,startSetendSet,然后循环,在每个项目采取行动.

代码非常混乱(部分是因为我已经遗漏了一些意大利面条逻辑)而我正在尝试重构它.更多背景信息:

  • 据我所知,oldSetnewSet实际上是由支持ArrayList
  • 每套包含少于100件物品,最多可能是20件
  • 这个代码经常被调用(以百万/天为单位),尽管这些代码很少有所不同

我的问题:

  • 如果我转换oldSetnewSetHashMap<Foo>(顺序并不关心这里的),用ID作为键,这将使得代码更易于阅读和更容易比较?转换损失了多少时间和内存性能?
  • 迭代这两组并执行适当的操作会更有效和简洁吗?

java collections

40
推荐指数
4
解决办法
10万
查看次数

标签 统计

java ×2

arraylist ×1

collections ×1