我有大約30個處理程序例程以字符串形式給定例程名稱時進行分派。 因此,在工廠方法中,調度例程的一種自然方式是使用一系列if...else
來比較例程名稱以適應插槽。它的工作原理,但毫無疑問,隨着例程數量的增加,它變得笨拙和低效。我想出了一個使用枚舉和EnumMap的時尚:每當我添加一個例程,我添加一個枚舉實例,並將其註冊到EnumMap(例程名稱和例程類別作爲鍵和值)。如何在Java中使用EnumMap進行qiuck查找?
正如我知道,當實例的數目是小於64(長型長度),所述EnumMap的實現使用一個long
作爲位陣列和使用位偏移做put
和get
,所以它速度非常快,只要例程數少於64(我非常適合我的情況),當我調度例程時,我可以獲得O(1)性能。
然而,EnumMap的的限制是其key type
只能是Enum
,而不是String
, ,我無法用常規的域名(string
)做一個快速查找....
有什麼辦法可以解決這個問題嗎? 或者,如果只有我可以用一個按鍵:)
爲什麼不使用'HashMap'?對你來說太慢了嗎? –
爲什麼你給字符串形式的例程名?是否可以使用多態方法並避免整個問題? – EJP
@Nikita Beloglazov,其實我現在用它,我只是想知道EnumMap怎麼樣,呃..也許這不是一個好的選擇。 – larmbr