我有两个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];
}}}
提前致谢:)
答案 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的值的乘法。