Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 搜索两个列表以比较值的最佳方法是什么?_Java_Search - Fatal编程技术网

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

Java 搜索两个列表以比较值的最佳方法是什么?,java,search,Java,Search,我有两个列表,一个列表包含一种类型的对象/类,另一个列表包含另一种类型的对象。但是,不同的对象有一个公共字段,该字段的值可以提供两个对象之间的链接。如果这个字段是一个字符串,我会比较两个不同对象之间的字符串值 搜索列表以比较列表中的元素以查找两个列表中哪些元素具有链接的最佳方法是什么 最简单的方法是使用2个循环,但什么是更有效的方法?假设list2中的值是唯一的,构建一个Map,由list2中的值键入,然后迭代list1以查找匹配项: Map<String, Class2> map2

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

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


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

假设
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
    }
}
Map map2=newhashmap();
对于(类别2 obj2:list2)
if(map2.put(obj2.getValue(),obj)!=null)
抛出新的IllegalStateException(“列表2中的重复值:+obj2.getValue());
对于(类别1 obj1:list1){
Class2 obj2=map2.get(obj1.getValue());
如果(obj2!=null){
//找到匹配项
}
}

这些对象是否共享一个包含公共属性的公共父类,或者这些对象是两个不同的类,它们的受尊敬的属性恰好具有相同的名称?每个列表中是否有多个具有相同值的对象?如果没有,最快的方法是使用其中一个列表创建值到对象的
映射,然后迭代另一个列表并查找以找到匹配项。如果可能存在重复的值,则首先需要确定在这种情况下应该发生什么,例如,如果第一个列表有2个值为“foo”的对象,而第二个列表有3个值为“foo”的对象,那么应该发生什么?@RAZ_Muh_Taz。它们不共享公共父类。属性的名称也不同(或可能相同)。这是我正在比较的属性的值。所以这两个类是不同的,但通过其中一个字段的值有一个共同的链接。@Andreas。是在其中一个列表中,可以有多个字段值相同的元素。在其他列表中,只能有一个元素具有该特定值。@然后使用其他列表构建映射。