现在的位置: 首页 > 综合 > 正文

使用HashSet获取两个List的并集

2013年07月01日 ⁄ 综合 ⁄ 共 676字 ⁄ 字号 评论关闭

 

近日在做项目的过程中,需要将两个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属性值是否相等进行判断的并集。

抱歉!评论已关闭.