簡體   English   中英

使用部分密鑰獲取HashMap的值

[英]Get Value of HashMap using part of the key

我有一個HashMap(String,Object)。 關鍵是超過1個唯一ID的組合。 我有一個輸入,一個字符串,它是鍵的一部分(1個唯一ID)。 我需要使用HashMap中的值來獲取HashMap中的值,而不需要在HashMap中迭代數千個值。

我們可以使用HashMap.get()中的任何Regex語句來實現它嗎?

我的密鑰是xxx.yyy.zzz,其中xxx.zzz的組合在整個Map中是唯一的。 我有xxx和zzz作為輸入。 此外,我為一個給定的zzz設置了yyy的可能值(5-6種可能性也可能增加)。

我現在有兩個選擇來解決這個問題。

  1. Map.Entry分別檢查密鑰是否以xxx和zzz開始和結束
  2. 試驗和錯誤方法i。 使用所有可能的yyys形成密鑰xxx.yyy.zzz,並使用.contains()ii檢查密鑰是否存在。 但是這樣,如果我為每次調用執行.contains()5-6次,在最壞的情況下是否會循環5-6次? III。 我也在stringpool中創建更多字符串。

我應該選擇哪一個?

HashMap檢索值而不迭代條目/鍵(你不想要的)的唯一方法是搜索完整的密鑰。

如果您需要通過部分密鑰進行有效搜索,則應考慮使用HashMap其鍵是該部分密鑰。

不,不可能將部分鍵與HashMap一起使用。

使用TreeMap可以使用所需鍵的部分前綴來實現,因為它允許您使用tailMap(String key)返回將跟隨特定鍵(即您的鍵部分)的地圖的一部分。 您仍然需要處理條目以查看哪些條目與部分鍵匹配。

如果您的密鑰類似於xxx.yyy.zzz並且您想使用xxx.*類型訪問,那么您可以考慮我的MapFilter類。

它允許您獲取Map並在特定鍵前綴上對其進行過濾。 這將搜索特定前綴並保留搜索結果以供日后使用。

我們可以使用HashMap.get()中的任何Regex語句來實現它嗎?

不,你不能。 您需要傳遞確切的密鑰才能獲得相關值。

或者,您應該迭代ober鍵並獲得與之匹配的值。 它們可以使用正則表達式來匹配鍵的輸入字符串。

您不能使用HashMap執行此操作。 但是,您可以使用TreeMap ,它將根據其自然順序在內部存儲密鑰。 您可以編寫一個自定義搜索方法,該方法將使用正則表達式在集合中找到匹配鍵(如果存在)。 如果寫得正確,這將花費O(lgN)時間,這比線性好得多。 問題減少到在String的有序列表中搜索String

正如@Thilo指出的那樣,這個解決方案假設您正在嘗試匹配從開頭開始而不是其他任何地方的密鑰片段。

HashMap適用於哈希算法,該算法維護密鑰哈希碼的哈希桶,並基於該哈希碼哈希映射檢索相應的值。 因為您需要為自定義對象重寫equals()hashcode()方法。

所以

  1. 如果您將嘗試獲取密鑰的值,則會生成密鑰的哈希碼值,並根據該哈希碼進行進一步的提取操作。

  2. 如果你不提供密鑰的完全匹配,HashMap將如何找出具有錯誤哈希碼的桶?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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