簡體   English   中英

Map鍵的最快速度是什么:Enum.valueOf(〜)vs String.hashCode()?

[英]What is the fastest for Map keys: Enum.valueOf(~) vs String.hashCode()?

我很難比較這兩者。 所以我吸引那些比我更詳細的人。 我必須將一個功能對象鏈接到一個名稱(當然是String ...),函數調用是這樣的:

serviceInstance.useThis(String name, Object parameter);

到目前為止,我正在考慮這個API的“后端”的三個選項:

  1. 枚舉+ EnumMap
  2. 純粹的枚舉
  3. HashMap中

1和2基本相同,但是如果我需要重用enum用於其他用途,則為1。 我主要關注的是Enum.valueOf(String name)與String.hashCode()相比有多快?

這是我正在玩的兩個實現:

public class HashMapHandlerType{

    static HashMap<String, MyInterfaceProvider> handlers = ~ ;

    public void useThis(String name, Object parameter) throws IllegalArgumentException {
        MyInterfaceProvider prov = handlers.get(name);
        if(prov != null){
            prov.get().use(parameter);
        }else{
            throw new IllegalArgumentException(name);
        }
    }

}

public class EnumTypeHandler{

    public void useThis(String name, Object parameter) throws IllegalArgumentException {
        HandlersEnum.valueOf(name).get().use(parameter);
    }

}

如果我想使用EnumMap,那么Enum的優勢就不用擔心會發生碰撞。 但是Enum的valueOf是否足以贏得String.hashCode()+在哈希函數中處理潛在的沖突?

當使用valueOf時,它基本上會懶惰地創建一個地圖。 此外,在創建地圖時,它使用反射來獲取值。 因為與使用String.hashCode()相比,反射調用肯定是昂貴的,在你的情況下已經計算過。

Louis Wasserman的評論回答了具體問題。 這是如何處理這類問題的更一般的答案。

  • 將數據結構及其訪問方法封裝在一個類中,以便只有該類的代碼依賴於設計選擇。
  • 編寫最簡單,最干凈,最易維護的實現選項。
  • 衡量程序的性能。
  • 如果它需要更快,配置文件。
  • 如果配置文件顯示與數據結構關聯的方法占很大一部分時間,則編寫並測量一個或多個替代實現。 選擇最快。

這有兩個主要優點。 如果問題不重要,因為最簡單的實現足夠快,你不要浪費任何時間。 如果相對性能問題很重要,則可以使用實際數據在實際程序的上下文中進行測量。

暫無
暫無

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

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