Java 如何比较两张不同大小的地图

Java 如何比较两张不同大小的地图,java,java-8,Java,Java 8,我有两张不同大小的地图。比如说 Map<String, Double> qm3 = new HashMap<>(); Map<String, Double> m = new HashMap<>(); import java.util.ArrayList; 导入java.util.HashMap; 导入java.util.List; 导入java.util.Map; 公共类NewClass2{ 公共静态void main(字符串[]args){ M

我有两张不同大小的地图。比如说

Map<String, Double> qm3 = new HashMap<>();
Map<String, Double> m = new HashMap<>();
import java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
公共类NewClass2{
公共静态void main(字符串[]args){
Map qm3=新的HashMap();
qm3.投入(“d”,0.2);
qm3.put(“e”,0.3);
qm3.put(“a”,0.8);
Map m=新的HashMap();
m、 put(“e”,0.3);
m、 put(“c”,0.4);
m、 put(“d”,0.5);
List qvec=new ArrayList();
List dvec=new ArrayList();
for(字符串key_from_qm3:qm3.keySet()){//for qm3中的每个键
如果(m.keySet().contains(key_from_qm3)){//检查它是否存在于m的键集中
qvec.add(qm3.get(key_from_qm3));//如果是,将qm3中的值放入qvec//map.get(key)返回该键的值
add(m.get(key_from_qm3));//将m中的值添加到dvec中
}
}
System.out.println(“qvec:+qvec”);
System.out.println(“dvec:+dvec”);
}   
}

只要可以理解,您的任务可以通过以下方式完成:

for(Map.Entry<String, Double> qe : qm3.entrySet()) {
    qvec.add(qe.getValue());
    dvec.add(m.getOrDefault(qe.getKey(), 0.0));
}

这将创建一个包含所有键的
LinkedHashSet
,它将保留插入键的顺序,因此您以后也可以使用该集合来确定哪个列表位置与哪个键关联。然后,它将使用这两种映射的默认值
0.0
填充列表。

您是否知道
Map
s具有获取值的方法,如果存在映射,则无需迭代整个映射?为什么不使用get?这个代码有点难以理解,什么是qvec?哦,不,我不熟悉这些东西,如何使用它,或者它的查找功能是什么?哦,qvec和dvec是两个列表否:(我想把qm3(d,e)的每个键与m(e,c,d)的每个键匹配)例如,D将与E、C、D进行比较,然后将D的值放在两个列表中。QVEC将存储来自QM3的D值,DVEC将存储MD值中的D值,这有助于您考虑使用<代码> M.CassKEY(KEYYOFAXQM3)而不是<代码> M KESET()。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class NewClass2 {

    public static void main(String[] args) {
        Map<String, Double> qm3 = new HashMap<>();
        qm3.put("d", 0.2);
        qm3.put("e", 0.3);
        qm3.put("a", 0.8);
        Map<String, Double> m = new HashMap<>();
        m.put("e", 0.3);
        m.put("c", 0.4);
        m.put("d", 0.5);
        List<Double> qvec = new ArrayList<>();
        List<Double> dvec = new ArrayList<>();

        for(String key_from_qm3 : qm3.keySet()){    //for each key from qm3
            if(m.keySet().contains(key_from_qm3)){  //check if it exists in the keyset of m
                qvec.add(qm3.get(key_from_qm3));    //if yes put the value from qm3 into qvec. //map.get(key) returns the value for that key
                dvec.add(m.get(key_from_qm3));      // and the value from m into dvec
            }
        }

        System.out.println("qvec : " + qvec);
        System.out.println("dvec : " + dvec);
    }   
}
for(Map.Entry<String, Double> qe : qm3.entrySet()) {
    qvec.add(qe.getValue());
    dvec.add(m.getOrDefault(qe.getKey(), 0.0));
}
LinkedHashSet<String> keys = new LinkedHashSet<>();
keys.addAll(qm3.keySet());
keys.addAll(m.keySet());
for(String key: keys) {
    qvec.add(qm3.getOrDefault(key, 0.0));
    dvec.add(m.getOrDefault(key, 0.0));
}