簡體   English   中英

Map的任何實現 <K1, K2, V> ,即兩把鑰匙?

[英]Any implementation of Map<K1, K2, V>, i.e. two keys?

我需要一張有兩個鍵的地圖,例如

Map2<String /*ssn*/, String /*empId*/, Employee> _employees;

這樣我就可以

_employees.put(e.ssn(), e.empId(), e)

然后

_employees.get1(someSsn);
_employees.get2(someImpId);

甚至

_employees.remove1(someImpId);

我不知道為什么我要停在兩個,為什么不多,可能是因為我現在需要的情況是這樣:-)但是類型需要處理固定數量的鍵是類型安全的 - 類型參數不能是vararg :-)

感謝任何指針,或建議為什么這是一個壞主意。

我的第一個想法是:我認為最簡單的方法是兩張地圖。

Map< String, Map< String,Employee> > _employees;

但從它的外觀來看,您只是希望能夠通過SSN或ID查找員工。 什么阻止你制作兩張地圖,或者最糟糕的是一個包含兩張地圖的類?

作為澄清,您是否正在尋找一個復合密鑰 ,即員工通過其SSN和ID的組合唯一標識,但不是單獨一個,或者您是否在尋找兩種不同的方式來引用員工?

我想鍵是empId ,所以我會建立一個以其為關鍵的Map ,即empId ---> Employee 所有其他唯一屬性(例如ssn )將被視為輔助屬性,並將使用單獨的Map作為empId的查找表(例如ssn ---> empId )。

這種實現方式可以輕松添加/刪除員工,因為您只需要更改一個Map ,即empId ---> Employee ; 其他Map只能在需要時重建。

Spiffy框架似乎提供了您正在尋找的東西。 來自Javadocs:

二維散列映射是一種HashMap,它使您能夠通過兩個鍵而不是一個鍵來引用值

相關的類是TwoDHashMap 它還提供了ThreeDHashMap

暫無
暫無

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

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