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