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 。