TreeMap中的二进制搜索

时间:2017-04-15 10:36:01

标签: java search hashmap binary-search-tree binary-search

我有两个TreeMap

第一张地图是:

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

,第二个是:

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

我想在第一个地图中搜索Key到第二个地图,然后将第一个地图的值乘以第二个地图值的列表(对于相似的键)。

下面的代码对我有用,但是当TreeMaps很大时搜索需要更多时间,我想提高速度,我该如何进行二分查找。 另一个问题是,最快的搜索方式是TreeMap还是HashMap

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

提前致谢:)

1 个答案:

答案 0 :(得分:1)

HashMap和TreeMap的Big-O表示法:

                     get      containsKey next     Notes
HashMap               O(1)     O(1)        O(h/n)   h is the table capacity
TreeMap               O(log n) O(log n)    O(log n) 
ConcurrentHashMap     O(1)     O(1)        O(h/n)   h is the table capacity 

如果已经知道要从树图中检索值的键。我建议使用HashMap,因为Hashmap的Big-O是O(1),以获得一个与TreeMap合成的元素,即O(log n)。

  

我想在第一张地图中搜索Key到第二张,然后   将第一个映射的值乘以第二个映射值的列表   (对于类似的键)。

通过使用HashMap,您可以使用Keys从两个HashMaps中检索值,并返回第一个值与第二个hashMap的值的乘法。