[英]Performance of TreeMap, HashMap and LinkedHashMap?
在 TreeMap 中 - 元素已排序
在 HashMap 中 - 元素未排序
那么,如果我考慮get
、 put
和remove
方法,我應該使用哪個映射來提高性能?
除非您需要訂購,否則請使用HashMap
。 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:
極客:
堆棧溢出:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.