Guava – MultiMap

Guava – MultiMap

MultiMap简介: MultiMap是一种将键与任意多的值联系起来的通用方法 。Guava的Multimap框架使得处理从键到多个值的映射变得容易。从概念上讲,有两种方式可以考虑MultiMap:作为一个从单个键到单个值的映射的集合。
1) 作为一个从唯一的键到值的集合的映射。

a -> 1
a -> 2
a -> 4
b -> 3
c -> 5

2) 声明:

a -> [1, 2, 4]
b -> [3]
c -> [5] 

接口的声明:com.google.common.collect.Multimap<K, V>接口的声明如下:

@GwtCompatible
public interface Multimap

下面是Guava Multimap接口提供的一些方法列表:

Guava - MultiMap
视图:Multimap还支持一些强大的视图。Multimap API的大部分功能来自于它提供的视图集合。这些集合总是反映出multimap本身的最新状态.

  • asMap:将任何Multimap<K, V>视为<K, Collection<V>>。返回的地图支持删除,并且对返回的集合的改变是通过写的,但是地图不支持put或putAll
  • entries:将MultiMap中的不同键作为一个集合。 <Map.Entry<K, V>> 将MultiMap的键视为一个多集,其倍数等于与该键相关的值的数量。元素可以从Multiset中移除,但不能添加,更改将被写入。
  • keySet:将多图中的不同键视为一个集合
    • keys:将Multimap的键视为一个Multiset,其倍数等于与该键相关的值的数量。元素可以从Multiset中移除,但不能添加,变化将通过以下方式写入.
    • values():将Multimap中的所有值看作是一个 “扁平化 “的Collection<V>,全部作为一个集合。这类似于Iterables.concat(multimap.asMap().values()),但返回一个完整的集合,而不是.

下面是Guava的MultiMap接口提供的一些方法列表:

Guava - MultiMap

Multimap 与 Map比较 : Multimap<K, V>不是 Map<K, Collection<V>,尽管在Multimap的实现中可能会用到这样的地图。下面给出的是两者的区别:

  • Multimap.get(key) 总是返回一个非空的,可能是空的集合。这并不意味着multimap会花费任何与键相关的内存,相反,返回的集合是一个视图,如果你愿意,可以添加与键的关联.
  • 如果你喜欢更类似于Map的行为,即对不在多图中的键返回null,可以使用asMap()视图来获得一个Map<K, Collection<V>
  • Multimap.containsKey(key) 是真的,当且仅当有任何元素与指定的键相关联。特别是,如果一个键k以前与一个或多个值相关联,而这些值后来被从多图中删除,Multimap.containsKey(k)将返回false.
  • Multimap.entries() 返回Multimap中所有键的所有条目。如果你想要所有的键集合条目,请使用asMap().entrySet().
  • Multimap.size() 返回整个multimap中的条目数,而不是独立键的数量。使用Multimap.keySet().size()来获取独立键的数量.

实现: Multimap提供了多种多样的实现方式。你可以在大多数你会使用Map<K, Collection<V>的地方使用它.

Guava - MultiMap

优点: Multimaps通常被用在 Map<K, Collection<V>会出现的地方.

  • 在用put()添加一个条目之前,不需要填充一个空的集合.
  • get()方法从不返回null,只返回一个空的集合(我们不需要像Map<String, Collection<V>测试案例中那样检查null).
  • 当且仅当一个键映射到至少一个值时,它才被包含在Multimap中。任何导致一个键的相关值为零的操作,都会产生从Multimap中删除该键的效果.
  • 总的条目值计数可通过size()获得.

赞(1)

评论 抢沙发

评论前必须登录!

 

Guava 教程
Guava 教程Guava - 概述Guava - 环境搭建Guava - Optional类Guava - Preconditions类Guava - Ordering类Guava - Objects类Guava - Range类Guava - Throwables类Guava - Collections 工具类Guava - Caching 工具类Guava - Multiset接口Guava - bimapGuava - MultiMap
Guava Ints类
Guava Ints类Guava Ints - concat() 函数Guava Ints - lastIndexOf() 函数Guava Ints - contains() 函数Guava Ints - asList() 函数Guava Ints - max() 函数Guava Ints - min() 函数Guava Ints - join() 函数Guava Ints - toArray() 函数Guava Ints - indexOf() 函数
Guava Chars类
Guava Chars类Guava - Chars.compare()方法与实例Guava - Chars.hashCode()方法与实例Guava - Chars.min()方法与实例Guava - Chars.max()方法与实例Guava - Chars.toArray()方法与实例Guava - Chars.concat()方法与实例Guava - Chars.contains()方法与实例Guava - Chars.lastIndexOf()方法与实例Guava - Chars.join()方法与实例Guava - Chars.indexOf()方法与实例Guava - Chars.asList()方法与实例
Guava LongMath类
Guava LongMath类Guava - LongMath.binomial方法与实例Guava - LongMath.log2方法与实例Guava - LongMath.pow方法与实例Guava - LongMath.isPowerOfTwo方法与实例Guava - LongMath.gcd方法与实例Guava - LongMath.mean方法与实例Guava - LongMath.sqrt方法与实例Guava - LongMath.mod方法与实例Guava - LongMath.log10方法与实例Guava - LongMath.checkedMultiply方法与实例Guava - LongMath.checkedAdd方法与实例Guava - LongMath.checkedPow方法与实例Guava - LongMath.divide方法与实例
Guava Longs类
Guava Longs类Guava - Longs.compare()方法与实例Guava - Longs.hashCode()方法与实例Guava - Longs.factorial方法与实例Guava - Longs.contains()方法与实例Guava - Longs.min()方法与实例Guava - Longs.max()方法与实例Guava - Longs.toArray()方法与实例Guava - Longs.lastIndexOf()方法与实例Guava - Longs.join()方法与实例Guava - Longs.asList()方法与实例Guava - Longs.checkedSubtract()方法与实例Guava - Longs.concat()方法与实例Guava - Longs.indexOf()方法与实例
Guava Booleans类
Guava Booleans类Guava - Booleans.asList()方法及示例Guava - Booleans.compare()方法及示例Guava - Booleans.concat()方法及示例Guava - Booleans.contains()方法及示例Guava - Booleans.countTrue()方法及示例Guava - Booleans.hashCode()方法及示例Guava - Booleans.indexOf()方法及示例Guava - Booleans.join()方法及示例Guava - Booleans.lastIndexOf()方法及示例Guava - Booleans.toArray()方法及示例
Guava Shorts类
Guava Shorts类Guava - Shorts.toArray()方法及实例Guava - Shorts.min()方法及实例Guava - Shorts.max()方法及实例Guava - Shorts.lastIndexOf()方法及实例Guava - Shorts.join()方法及实例Guava - Shorts.indexOf()方法及实例Guava - Shorts.hashCode()方法及实例Guava - Shorts.contains()方法及实例Guava - Shorts.concat()方法及实例Guava - Shorts.asList()方法及实例
Guava IntMath类
Guava IntMath类Guava - IntMath.checkedAdd()方法及实例Guava - IntMath.checkedMultiply()方法及实例Guava - IntMath.checkedPow()方法及实例Guava - IntMath.checkedSubtract()方法及实例Guava - IntMath.divide()方法及实例Guava - IntMath.log10()方法及实例