TreeMap,HashMap和LinkedHashMap的性能?

时间:2012-05-04 04:36:42

标签: java performance map

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

那么,如果我考虑使用getputremove哪种方法用于表现?

3 个答案:

答案 0 :(得分:5)

除非您需要订购,否则请使用HashMapHashMap更快。

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

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

答案 1 :(得分:0)

这取决于哈希和比较函数在地图中的键上的速度。这取决于你是否对平均案例表现或最坏情况表现更感兴趣。这取决于你是否有一个很好的哈希函数应用于你的地图的键;哈希值应该在哈希函数的域中很好地分布(是的,它可以取决于你的数据)。

一般情况下(当你不能打扰测试时),哈希映射通常是一个很好的答案,但如果你没有数千个条目(对于小尺寸,也不太可能产生很大的影响) “vec map”也可以很好地工作。)

答案 2 :(得分:0)

在迭代方面,这取决于您的意图:

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

Futhermore,用于放置/获取/删除/包含键的时间复杂度:

  • HashSet-O(1);
  • TreeMap-O(log(n))或O(1); -请参阅参考!
  • LinkedHashSet-O(1)。

Geekforgeeks:

StackOverflow: