java - 如何在两个列表之间找到匹配的对象?

Qua*_*Oat 8 java algorithm list data-structures

给定两个列表,每个列表保持相同的对象类型,我想根据一些属性值在两个匹配的列表之间找到对象.

例如,来自List1的对象L1Obj匹配来自List2,L2Obj的对象,如果L1Obj.a == L2Obj.a AND L1Obj.b == L2Obj.c AND L1Obj.c == L2Obj.c

这些属性不是该类的唯一属性,而是唯一标识列表中对象所需的属性.

我的问题是 - 实现这一目标的最佳方法是什么?

一种方法是基于列表构造HashMaps,使用a + b + c的concataned String值作为索引对象的键.这样我就可以遍历第一个列表,并尝试使用相同的密钥在第二个列表中查找对象.

这听起来怎么样?有没有更好的方法来实现这一目标?

非常感谢所有帮助!


更新:

好的,实际上我还需要更多.找到匹配后,我想用L2Obj的属性覆盖属性L1Obj.x,L1Obj.y,L1Obj.z.HashSet听起来很适合找到匹配,但如果我是对的,它实际上不允许我访问这些匹配.

我该怎么办?

ILM*_*tan 8

你想看看执行的对象equals(Object),并hashCode()只考虑到自己关心的领域?如果是这样,您可以HashSet从第一个列表创建一个新的,然后retainAll()在第二个列表中调用传递.

如果他们没有实现equals(Object)并且hashCode()关于您关心的属性,您可以创建一个TreeSet并传入一个Comparator查看您关注的属性.