ArrayListMultimap类的继承关系如下图所示:
Guava ArrayListMultimap
List Multimap 是一个接口,继承自 Multimap 接口。ListMultimap接口为所有继实现自ListMultimap的子类定义了一些共有的方法签名。ListMultimap接口并没有定义自己特有的方法签名,里面所有的方法都是重写了Multimap接口中的声明,只是将Multimap接口中返回Collection类型的函数修改成返回List类型。比如Multimap接口中get函数的函数原型为Collection get(@Nullable K key);而ListMultimap接口则变成了List get(@Nullable K key);这是因为Multimap接口为多个实现类定义了其子类必须实现的方法,由于其子类(TreeMultimap、 ArrayListMultimap)的实现不一样,而Multimap接口又定义了它们共有的方法,所以里面的函数原型大多数的返回类型为Collection,我们知道List、Set都继承自Collection。ListMultimap接口的这种设计符合 《里氏替换法则》。
AbstractListMultimap继承自 AbstractMapBasedMultimap类,并实现了ListMultimap接口。AbstractListMultimap类中主要实现了ListMultimap接口里面的方法。同ListMultimap接口类似,AbstractListMultimap类将 AbstractMapBasedMultimap类中返回Collection类型的函数修改成返回List类型。里面很多的实现都是调用了AbstractMapBasedMultimap类中相应函数的实现,仅仅简单的将返回Collection类型函数修改为List类型。
AbstractMapBasedMultimap类的介绍请参见
《Guava学习之AbstractMapBasedMultimap》。
ArrayListMultimap类是Multimap接口的ArrayList方法实现的类,在前面的《Guava学习之AbstractMapBasedMultimap》文章中我们谈到了Multimap接口的几种实现,其中就有以ArrayList实现的。
这里说的以ArrayList实现或者TreeSet实现是指key所对应的value存放方式。详细介绍请看
《Guava学习之AbstractMapBasedMultimap》
ArrayListMultimap类主要有三个构造函数,实现如下:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
private
ArrayListMultimap() {
super
(
new
HashMap<K, Collection<V>>());
expectedValuesPerKey = DEFAULT_VALUES_PER_KEY;
}
|