【问题标题】:binary search in the TreeMapTreeMap 中的二分查找
【发布时间】:2017-04-15 18:49:49
【问题描述】:

我有两个 TreeMap

第一张地图是:

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

第二个是:

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

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

下面的代码对我很有用,但是当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];
         }}}

提前致谢:)

【问题讨论】:

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


    【解决方案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)。

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

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

    【讨论】:

    • 在我的情况下,我将使用 getKey 、 getValue 和 containsKey 方法,所以它们的大 O 将是 O(1),这看起来很棒,所以我需要使用二进制来编写它们搜索?以及方法 remove() 的 Big-O 是什么。
    • 嗨 vlaxmi,我有一个问题,哈希图总是比树图好,考虑树图按字母顺序排列吗?或者这不会提高速度
    • 我们将根据用例决定使用哪一个(散列图/树图)。你可以在这里找到更多细节 - javarevisited.blogspot.hk/2015/08/…
    猜你喜欢
    • 1970-01-01
    • 2015-02-06
    • 2012-10-05
    • 2015-12-10
    • 1970-01-01
    • 2021-03-07
    • 2021-12-12
    • 2015-11-17
    相关资源
    最近更新 更多