[英]What is the fastest for Map keys: Enum.valueOf(~) vs String.hashCode()?
我很難比較這兩者。 所以我吸引那些比我更詳細的人。 我必須將一個功能對象鏈接到一個名稱(當然是String ...),函數調用是這樣的:
serviceInstance.useThis(String name, Object parameter);
到目前為止,我正在考慮這個API的“后端”的三個選項:
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.