2017-03-16 77 views
2

我有两个TreeMap的比较两个TreeMap中

的第一张地图是:

Map<String, Double> m1 = new TreeMap(); 

,第二个是:

Map<String,double []> m2 = new TreeMap(); 

我要在第一张地图的键搜索到第二一个,然后将第一个映射的值乘以第二个映射值的列表(对于相似的键)。 之后,我将从乘法中得到一个double类型的数组,然后我想将每个索引的值相加独立。

例如:

地图1:

Apple : 1.0 
Cat:2.1 
Dog:1.2 

地图2:

Apple:{2.0,0.0,4.0} 
Dog {1.1,0.0,0.0} 
Moon:{0.0,5.0,2.0} 

结果将是:

Apple{2.0,0.0,4.0} 
Dog{1.32,0.0,0.0} 

然后求和:

{3.32,0.0,4.0} 

这是我的尝试,我做了两个矩阵之间的搜索,然后我做乘法。

***我的问题我该如何做每个指数的总和以及如何检索特殊指数的值。

for (Map.Entry<String,Double> entry : m1.entrySet()) { 
List<Double> myList = new ArrayList<Double>(); 
    if (m2.containsKey(entry.getKey())) { 
     //if the key is common in map1 and map2, compare the values 
        double y=entry.getValue(); 
        double j[]=m2.get(entry.getKey()); 
        for (int u=0;u<j.length;u++){ 
         myList.add(j[u]); 
        } 
        for (int i=0;i<myList.size();i++){ 

        System.out.println(entry.getKey()+" "+myList.get(i)*y); 
       } 
       }} 
+0

这里的一个nit选择是containsKey和combo的get后面只是浪费时间。只需使用get,并查看它是否为null。 – MeBigFatGuy

+0

@MeBigFatGuy Thx为您的重播,但我没有明白;(,你能解释更多 – Geek

+0

double j [] = m2.get(entry.getKey()); if(j!= null){ 。 .... } – MeBigFatGuy

回答

0

鉴于加入的可交换性,保持总求和阵列环路的外部,并且用于每个匹配的钥匙,总和阵列的当前索引i增加的y和f] [I]的产物。

我们假设数组的大小为N.那么:

double[] finalSum = new double[N]; 

for (Map.Entry<String,Double> entry : m1.entrySet()) { 
    if (m2.containsKey(entry.getKey())) { 
     //if the key is common in map1 and map2, compare the values 
     double y=entry.getValue(); 
     double j[]=m2.get(entry.getKey()); 
     for (int u=0;u<j.length;u++){ 
      finalSum[u] += y * j[u]; 
     } 
    } 
} 
+0

感谢Edd为您的重播,最后总结知道包含所有键的valuse,但我的问题我怎么能总结每个索引speratly的值,例如索引值0。 – Geek