7

谷歌的决定是否类似于SortedMultiSet (stackoverflow question)的决定, 还是因为没有使用MultiKeyMap

我知道替代方法MultiKeyMap可以是使用自定义类作为键,其中包含多个键作为其类成员。相反,我喜欢在调用 .get 的时候指定多个键的概念MultiKeyMap

Apache 的版本MultiKeyMap很棒,但我严重缺少泛型,因此研究了谷歌集合以获取它的现代实现。如果有人知道为什么 Google 还不支持它,或者有更好的替代方案,请回复。

4

3 回答 3

11

仅供参考,接受的答案在 2010 年 3 月得到了回答,但截至 2010 年 9 月 Guava 包括在内Table

于 2013-09-19T17:06:44.123 回答
7

我们有一个非常好的实现两层映射,我们称之为“表”(K1 是“行键”,K2 是“列键”),但我们还没有发布它。然而,过去的两个关键是收益递减。

于 2010-03-03T23:44:36.890 回答
3

我认为泛型可能是这里实施的最佳选择。如果您只看 Map 接口,就会有键类型 (K) 和值类型 (V) 的通用说明符。我不相信在不将实现分成多个类(每个关键组件一个)的情况下使用泛型轻松指定它是不可能的。

你需要为每个类:

MultiKeyMap2<K1,K2,V>
MultiKeyMap3<K1,K2,K3,V>
MultiKeyMap4<K1,K2,K3,K4,V>
MultiKeyMap5<K1,K2,K3,K4,K5,V>

底层实现基本上是按照您的建议进行(使用自定义类)。但是,它并没有正式为它创建一个类,所有内容都是内联的。这实际上是一个实现细节。但是要使用 Google 集合,一个自定义类来执行相同的操作将与我确定实现 hashCode() 和 equals() 的方式大致相同。

于 2010-03-03T16:20:50.937 回答