2016-02-22 32 views
-1

我正在Java中實現緩存(顯然它有get()put()方法)。我有兩個String鍵和一個Object值。這是更好的性能明智,地圖與單個地圖與按鍵連接的地圖?

Key1 + Key2 --> Val(「‘密鑰1’+‘鍵2’」是關鍵和Val是緩存值)

我有以下兩種方法來實現我的緩存與基本操作。

方法1

有一張地圖,說SingleMap<<KeyValue>>,這裏的關鍵是兩個鍵(Key1 + Key2)的連接。

獲取方法簽名

Val SingleMap.get(Key1 + Key2){ } 

put方法簽名

void SingleMap.put(Key1 + Key2, val){ } 

方法2

將使用兩個地圖

InnerMap<Key2, val> 

OuterMap<Key1, InnerMap> 

獲取方法簽名:

Val OuterMap.get(Key1).get(key2){} 

把方法簽名

Void OuterMap.put(Key1, new InnerMap(key2, val)); 

這是實現高速緩存的最佳方法(性能明智)?
如果您有其他更好的方法,請告訴我。

+0

你可能不會注意到多大的差別在性能方面(你嘗試的東西嗎?),但是從一個存儲點的第一種方法可能會更好,這取決於外鍵集的大小將會有多大(即你最終會得到多少內圖)。除此之外,如果在任何情況下都必須提供兩個密鑰,那麼問題就是爲什麼有兩個密鑰。 – Thomas

回答

0

從表現上看,您的第一種方法會更快,因爲它只需從1張地圖中獲取信息。 但是,如果您使用這種方法,您必須確保按鍵始終保持相同的順序(按鍵1永遠不能是按鍵2),否則您必須在地圖上添加按鍵1 +按鍵2和按鍵2 +按鍵1 。關於與集合表現

的更多信息:http://bigocheatsheet.com/