使用HashSet获取两个List的并集

 

近日在做项目的过程中,需要将两个List(ArrayList)中的值,按照某个属性值是否相等进行获取并集的操作。而两个List中存放的数据类型完全不相同(一个自定义的类,一个Stirng数组),并且两个List中的元素数量都较多,两层嵌套循环判断是一个效率比较低的办法,即使在搜索值是否相等时,使用折半算法,也会有较大的效率损失。

考虑到Java中的Set是一种不包含重复元素的collection。因此考虑使用Set解决此问题。而所有的Set实现类中HashSet的效率较高(HashSet基本使用HashMap的实现,在比较Set中元素是否相同时,首先比较两者的key值是否相同;如果key值相同,则调用Set中已有元素对象的“equals”方法,比较原Set中的元素与新加入的元素是否相同),因此采用HashSet做为首选方案。由于两个List中的元素类型不相同,因此,需要将其中一个的类型进行转换。考虑到需要重写Object的“equals”与“hashCode”方法,将包含String数组的List进行转换。而比较值是否相等时,需要判断两个对象的id属性是否相等,因此将List中所存放元素的“hashCode”方法,重写(Override)为返回当前对象的id属性值;重写“equals”方法为判断当前对象与目标对象的id属性值是否相等。然后将存放String数组的List中所有的元素转换为另一个List中的类型。分别遍历两个List,并将其中的元素加入HashSet中,得到两个List根据其中元素的id属性值是否相等进行判断的并集。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值