我一直在查看mutable multimap implementations of Guava并注意到大多数键和值实现组合都不存在。
Java提供3个Map
实现,2个List
实现和3个Set
实现。 Map
实现控制键行为,Set
和List
实现控制值行为。从理论上讲,可以有3 x (2+3) = 15
种组合。番石榴提供其中的5种。
其他组合是否没有意义(它们更糟)?他们不可能实施吗?它们没问题但是没有必要这么多组合吗?
(请注意,虽然我引用Java,但这是数据结构中的一个问题,并不限于特定语言。可以使用任何可以显示哈希表,数组,链接列表等的语言。)< / em>的
答案 0 :(得分:4)
使用MultimapBuilder
拥有所有这些组合,例如TreeMap
- &gt; ArrayList
可以使用以下内容构建:
ListMultimap<String, Integer> treeListMultimap =
MultimapBuilder.treeKeys().arrayListValues().build();
想要SetMultimap
“EnumSet
”值“?使用:
SetMultimap<Integer, MyEnum> hashEnumMultimap =
MultimapBuilder.hashKeys().enumSetValues(MyEnum.class).build();
(取自documentation的例子。)
如果你想要更多的可能性,不仅限于JDK地图/集合实现,你总是可以构建自己的多重映射,比如使用静态方法:Multimaps.new{List,Set,SortedSet}Multimap
:
ListMultimap<String, Integer> myListMultimap =
Multimaps.newListMultimap(new HashMap<>(), MyList::new);
修改强>
(直接回答下面的问题。)
其他组合是否没有意义(它们更糟糕)?
它们有意义,它们在现实世界中更为罕见。
他们无法实施吗?
他们有可能,为什么不呢?
它们没问题,但不需要这么多组合吗?
见上文 - 您可以使用new*Multimap
或MultimapBuilder
构建此类多地图。他们(即Guava团队)总是在Google内部代码库中获取使用统计信息,所以我猜他们选择了最常用的代码库。