Tor*_*ten 0 naming-conventions guava
这个真让我(和我的同事)烦恼.
不是
那么为什么没有人注意到这个命名惯例的缺陷或者是否有这个错字背后的意图?
这不是一个错字.番石榴的Multimap是不是一个Map,也就是说,它不会扩展Map接口(它不应该).有关此主题,请参阅Guava的Wiki页面:
Multimap.get(key)始终返回一个非null,可能为空的集合.这并不意味着multimap花费与该键相关联的任何内存,而是返回的集合是一个视图,允许您根据需要添加与该键的关联.- 如果您更喜欢为不在多图中的键
Map返回更像的行为null,请使用asMap()视图来获取Map<K, Collection<V>>.(或者,要从a 获取a ,请使用静态方法.对于和,存在类似的方法.)Map<K,List<V>>ListMultimapMultimaps.asMap()SetMultimapSortedSetMultimapMultimap.containsKey(key)当且仅当存在与指定键关联的任何元素时才为真.特别是,如果某个键k先前与一个或多个已从多图中删除的值相关联,Multimap.containsKey(k)则将返回false.Multimap.entries()返回所有键的所有条目Multimap.如果您想要所有密钥收集条目,请使用asMap().entrySet().Multimap.size()返回整个multimap中的条目数,而不是不同键的数量.Multimap.keySet().size()而是使用来获取不同键的数量.
另一方面,Apache Commons Collections'MultiMap(不是地图中的大写"M")扩展Map,但它在使用上有点尴尬,而且Apache开发人员也认为在multimap中扩展和模仿类似地图的行为并不是什么用户想要的东西,所以他们不赞成MultiMap(是的,你不应该使用旧MultiMap接口和新的代码实现!),现在推荐使用MultiValueMap,而不是-它并不会延长Map,并且具有十分相似的API番石榴等同.