搜索2个列表以比较值的最佳方法是什么?

时间:2019-07-16 21:35:02

标签: java search

我有两个列表,一个列表包含一种类型的对象/类,第二个列表包含另一种类型的对象。但是,不同的对象具有一个公共字段,其值可以提供两个对象之间的链接。因此,如果该字段是一个字符串,我将只比较两个不同对象之间的字符串值。

搜索列表以比较列表中的元素以查找两个列表中的哪些元素具有链接的最佳方法是什么?

最简单的方法是使用2个循环,但是更有效的方法是什么?

1 个答案:

答案 0 :(得分:1)

假设list2中的值是唯一的,请构建一个Map中的值作为键的list2,然后迭代list1来查找匹配项:

Map<String, Class2> map2 = new HashMap<>();
for (Class2 obj2 : list2)
    if (map2.put(obj2.getValue(), obj) != null)
        throw new IllegalStateException("Duplicate value in list2: " + obj2.getValue());
for (Class1 obj1 : list1) {
    Class2 obj2 = map2.get(obj1.getValue());
    if (obj2 != null) {
        // found match
    }
}