7

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

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

这样我就可以

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

然后

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

甚至

_employees.remove1(someImpId);

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

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

4

3 回答 3

4

我想键是empId,所以我会用它作为键来构建一个Map,即empId---> Employee。所有其他唯一属性(例如ssn)将被视为次要属性,并将使用单独Map的 s 作为empId(例如ssn---> empId)的查找表。

此实现使添加/删除员工变得容易,因为您只需要更改一个Map,即empId---> Employee;其他Map的只能在需要的时候重建。

于 2008-11-22T11:50:58.233 回答
4

我的第一个想法是:我认为最简单的方法是两张地图。

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

但从外观上看,您只想能够通过 SSN 或 ID 查找员工。那么是什么阻止你制作两张地图,或者最坏的情况是一个包含两张地图的类?

澄清一下,您是在寻找复合键,因为员工由其 SSN 和 ID 的组合唯一标识,但不是单独标识,还是您正在寻找两种不同的方式来引用员工?

于 2008-11-22T08:56:54.480 回答
2

Spiffy 框架似乎提供了您正在寻找的东西。来自 Javadocs:

二维哈希映射是一种哈希映射,它使您能够通过两个键而不是一个键来引用值

相关类是TwoDHashMap。它还提供了ThreeDHashMap

于 2008-11-22T17:57:48.147 回答