2017-10-12 77 views
0

最近在訪問中提出了這個問題,訪問者更關心爲此服務的任何第三方庫。自定義哈希映射爲多個搜索提供不同的密鑰

如果如果我想用ID來搜索僱員我已經與

String firstName; 
int id; 
String lastName; 

一個Employee類,我需要在我的HashMap中使用id作爲重點和員工的價值

HashMap<Integer,Employee> 

如果我想現在使用我的密鑰作爲名字,那麼我需要另一個hashMap作爲HashMap<String,Employee>

是否有任何標準庫,我不需要製作多個Google Maps for searchin g目的使用不同的鍵。 如果我想使用id + firstName作爲搜索條件並將值作爲Employee對象,該怎麼辦? 如果有10個屬性,我需要設計一個數據結構來實現這個目的呢?

回答

0

您可以使用SQLite(標記的Android)數據庫,以便您可以使用任何屬性搜索記錄。

+0

謝謝,但我想只使用數據結構來做到這一點。我很好奇是否有任何庫(Google/Guavus)爲我們提供了自定義的HashMap,或者我們可以創建自己的HashMap。 – paras4all

0

您可以簡單地使用一個HashMap<String,Employee>

作爲鍵使用包含屬性名稱作爲前綴的字符串,例如, idfirstName,姓氏followed by a separator like:`和之後的價值。

這也可以使用屬性的組合作爲關鍵。

如果您現在將一個員工實例添加到HashMap中,則添加三個條目,並使用相同的值。

實施例:

employee1 = Employee { 
    id: 1, 
    firstName: "John", 
    lastName: "Doe" 
} 

HashMap: { 
    "id:1" -> employee1 
    "firstName:John" -> employee1 
    "lastName:Doe" -> employee1 
} 
+0

當談到檢索時,我傳遞了map.get(1)或map.get(「John」)或map.get(「Doe」)。即使我們用John連接fN,用Doe連接lN來獲得Employee對象,如何區分firstName和lastName。如果全名是John Doe和John Loe呢? map.get(「firstName:John」)會給出不正確的結果。如果全名是John Doe和Doe John,會怎麼樣?再次錯誤的結果。不是嗎? – paras4all

+0

不,你傳遞'map.get(「firstName:John」)''或'map.get(「lastName:Doe」)''。 – Robert

+0

如果你有多個條目映射到同一個鍵,你需要一個MultiMap,像[Guava](https://github.com/google/guava/wiki/NewCollectionTypesExplained#multimap)。 – Robert