8

在 TreeMap 中 - 元素已排序
在 HashMap 中 - 元素未排序

那么,如果我考虑get,putremove方法我应该使用哪个映射来提高性能?

4

3 回答 3

5

HashMap除非您需要订购,否则请 使用 a 。HashMap是比较快的。

也就是说,您可以通过使用通用接口作为声明来轻松切换:

 Map<String,String> M = new HashMap<String,String>();
 ...use M lots of places...

然后你所要做的就是切换一个地方,你的代码使用新的地图类型。

编辑:

一个简单的时序测试:

import java.util.*;
class TimingTest {
  public static void main(String[] args) {
    Map<String,String> M = new HashMap<String,String>();
    long start = System.currentTimeMillis();
    for (int i = 0; i < 100000; i++) {
      M.put(Integer.toString(i), "foo");
    }
    long end = System.currentTimeMillis();
    System.out.println(end - start);
  }
}
于 2012-05-04T04:52:52.870 回答
0

这取决于哈希和比较函数在地图中的键上的速度。这取决于您是对平均情况下的性能还是最坏情况下的性能更感兴趣。这取决于您是否对地图的键应用了良好的散列函数;散列值应该很好地分布在散列函数的域中(是的,它可以取决于您的数据)。

通常(当您懒得测试时),哈希映射通常是一个很好的答案,但如果您没有数千个条目(对于小尺寸,“vec地图”也可以很好地工作)。

于 2017-06-19T10:00:32.747 回答
0

就迭代而言,这取决于您的意图:

  • HashMap 不保证这种情况,这意味着它是随机的;
  • TreeMap 使用自然顺序或 Comparator(如果指定);
  • LinkedHashMap 根据插入顺序进行迭代。

此外,对于 put/get/remove/containsKey 的 TimeComplexity:

  • 哈希集 - O(1);
  • TreeMap - O(log(n)) 或 O(1); ——见参考!
  • LinkedHashSet - O(1)。

极客:

堆栈溢出:

于 2020-07-06T21:12:15.860 回答