比较两个TreeMap

时间:2017-03-16 16:40:47

标签: java matrix treemap

我有两个TreeMap

第一张地图是:

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

,第二个是:

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

我想在第一个地图中搜索Key到第二个地图,然后将第一个地图的值乘以第二个地图值的列表(对于相似的键)。 之后我将从乘法中得到一个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}

这是我的尝试,我在两个矩阵之间进行搜索,然后进行乘法运算。

***我的问题是如何对每个索引进行求和以及如何检索spesfic索引的值。

    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);
                 }
               }}

1 个答案:

答案 0 :(得分:0)

给定加法的可交换属性,将总和数组保持在循环之外,对于每个匹配的键,将总和数组的当前索引i加到y和j [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];
         }
     }
}