簡體   English   中英

快速靜態鍵值映射

[英]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.

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