Map <k1,k2,=“”v =“”>的任何实现,即两个键?</k1,>

时间:2008-11-22 08:49:52

标签: java generics maps

我需要一张有两个键的地图,例如

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

所以我可以

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

以后

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

甚至

_employees.remove1(someImpId);

我不知道为什么我要停在两个,为什么不更多,可能是因为我现在需要的情况:-)但是类型需要处理固定数量的键是类型安全的 - 类型参数不能是vararg: - )

感谢任何指示,或建议为什么这是一个坏主意。

3 个答案:

答案 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