簡體   English   中英

TreeMap、HashMap 和 LinkedHashMap 的性能?

[英]Performance of TreeMap, HashMap and LinkedHashMap?

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

那么,如果我考慮getputremove方法,我應該使用哪個映射來提高性能?

除非您需要訂購,否則請使用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地圖”也可以很好地工作)。

這取決於您的意圖,在迭代方面:

  • HashMap 不保證這種情況,這意味着它是隨機的;
  • 如果指定,TreeMap 使用自然順序或比較器;
  • LinkedHashMap 根據插入順序進行迭代。

此外,對於 put/get/remove/containsKey 的 TimeComplexity:

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

極客:

堆棧溢出:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM