在 TreeMap 中 - 元素已排序
在 HashMap 中 - 元素未排序
那么,如果我考虑get
,put
和remove
方法我应该使用哪个映射来提高性能?
在 TreeMap 中 - 元素已排序
在 HashMap 中 - 元素未排序
那么,如果我考虑get
,put
和remove
方法我应该使用哪个映射来提高性能?
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);
}
}
这取决于哈希和比较函数在地图中的键上的速度。这取决于您是对平均情况下的性能还是最坏情况下的性能更感兴趣。这取决于您是否对地图的键应用了良好的散列函数;散列值应该很好地分布在散列函数的域中(是的,它可以取决于您的数据)。
通常(当您懒得测试时),哈希映射通常是一个很好的答案,但如果您没有数千个条目(对于小尺寸,“vec地图”也可以很好地工作)。
就迭代而言,这取决于您的意图:
此外,对于 put/get/remove/containsKey 的 TimeComplexity:
极客:
堆栈溢出: