我需要一张有两个键的地图,例如
Map2<String /*ssn*/, String /*empId*/, Employee> _employees;
所以我可以
_employees.put(e.ssn(), e.empId(), e)
以后
_employees.get1(someSsn);
_employees.get2(someImpId);
甚至
_employees.remove1(someImpId);
我不知道为什么我要停在两个,为什么不更多,可能是因为我现在需要的情况:-)但是类型需要处理固定数量的键是类型安全的 - 类型参数不能是vararg: - )
感谢任何指示,或建议为什么这是一个坏主意。
答案 0 :(得分:4)
我的第一个想法是:我认为最简单的方法是两张地图。
Map< String, Map< String,Employee> > _employees;
但从它的外观来看,您只是希望能够通过SSN或ID查找员工。什么阻止你制作两张地图,或者最糟糕的是一个包含两张地图的类?
作为澄清,您是否正在寻找复合密钥,因为员工是通过SSN和ID的组合唯一识别的,但不是单独识别,或者您是否正在寻找两种不同的方式引用员工?
答案 1 :(得分:4)
我想 main 键是empId
,所以我会用Map
构建一个empId
,即Employee
---&gt; ssn
。所有其他唯一属性(例如Map
)将被视为 secondary ,并将使用单独的empId
s作为ssn
的查找表(例如empId
} ---&gt; Map
)。
此实施方式可以轻松添加/删除员工,因为您只需要更改一个empId
,即Employee
---&gt; Map
;其他{{1}}只能在需要时重建。
答案 2 :(得分:2)
Spiffy Framework似乎提供了您正在寻找的内容。来自Javadocs:
二维hashmap,是一个 HashMap,使您可以参考 值通过两个键而不是一个
相关课程为TwoDHashMap。它还提供了ThreeDHashMap。