[英]fast static key-value mapping
我有一組唯一的鍵值對,鍵和值都是字符串。 對的數量非常大,找到某個字符串的值非常關鍵。
這些對是預先計算的,並針對特定程序給出。 所以我可以寫一個包含以下內容的方法:
public String getValue(String key)
{
//repeat for every pair
if(key.equals("abc"))
{
return "def";
}
}
但我說的是超過250,000對,也許對它們進行排序可能會更快...
我有一個包含getValue()
方法的類,可以使用其構造函數,但與任何數據庫/文件系統等都沒有連接。因此,每一對都必須在該類內定義。
您有沒有比一系列if語句更快的想法? 也許使用排序圖對將這些對進行預排序。 也許通過反序列化已創建的映射來改善構造器時間?
我希望您的答案包含您的方法的基本代碼示例,我將對答案和它們花了一對時間的相應時間進行注釋!
時間范圍:一個構造函數調用和20個getValue()
調用1000毫秒。
鍵的大小為256,值的大小為<16
這正是哈希表的用途。 如果實施正確,它將提供O(1)
查找,這意味着,只要您有足夠的內存並且哈希函數和沖突策略很聰明,它就可以在恆定時間內獲取鍵的值。 Java具有多個哈希支持的數據結構,從HashMap<String, String>
可以為您解決問題。
您可以這樣構造它:
Map<String, String> myHashTable = new HashMap<String, String>();
添加這樣的值:
myHashTable.put("abcd","value corresponding to abcd");
並獲得像這樣的鍵的值:
myHashTable.get("abcd");
當您直覺認為通過所有鍵運行和檢查效率不高時,您將走在正確的軌道上,這將是O(n)
運行時方法,因為您必須運行所有n
元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.