怎么比较两个集合java_如何最好比较两个集合在Java和行为在他们?

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

>如果foo在(*)oldSet而不是newSet,调用doRemove(foo)

> else if foo不在oldSet中,而是在newSet中,调用doAdd(foo)

> else如果foo在集合中但是被修改,调用doUpdate(oldFoo,newFoo)

> else if!foo.activated&&& foo.startDate> = now,call doStart(foo)

> else if foo.activated&& foo.endDate< = now,call doEnd(foo)

(*)“in”表示唯一标识符匹配,不一定是内容。

当前(遗留)代码做许多比较来找出removeSet,addSet,updateSet,startSet和endSet,然后循环来对每个项目进行操作。

代码是相当混乱(部分是因为我已经省略了一些意大利面条逻辑),我试图重构它。一些更多的背景信息:

>据我所知,oldSet和newSet实际上是由ArrayList支持

>每个集合包含少于100个项目,最有可能最多在20

>该代码被频繁调用(以百万/天为单位),尽管这些集合很少不同

我的问题:

>如果我将oldSet和newSet转换为HashMap< Foo> (这里不关心顺序),使用ID作为键,它会使代码更容易阅读和更容易比较?多少时间&内存性能是损失的转换?

>会迭代两个集合并执行适当的操作更高效和简洁吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值