这里简单的介绍一下 Guava
的 collections
。
分类
在 Guava
中主要分为两个类
每一个集合都有对应的工具类。
集合接口 |
属于JDK还是Guava |
对应的Guava工具类 |
不可变版本 |
Collection |
JDK |
Collections2:不要和 java.util.Collections 混淆 |
ImmutableCollection |
List |
JDK |
Lists |
ImmutableList |
Set |
JDK |
Sets |
ImmutableSet |
SortedSet/NavigableSet |
JDK |
Sets |
ImmutableSortedSet |
Map |
JDK |
Maps |
ImmutableMap |
SortedMap |
JDK |
Maps |
ImmutableSortedMap |
Queue |
JDK |
Queues |
|
Multiset |
Guava |
Multisets |
ImmutableMultiset |
SortedMultiset |
Guava |
|
ImmutableSortedMultiset |
Multimap |
Guava |
Multimaps |
ImmutableMultimap |
ListMultimap |
Guava |
|
ImmutableListMultimap |
SetMultimap |
Guava |
|
ImmutableSetMultimap |
BiMap |
Guava |
Maps |
ImmutableBiMap |
ClassToInstanceMap |
Guava |
|
ImmutableClassToInstanceMap |
Table |
Guava |
Tables |
ImmutableTable |
不可变集合
创建方式
不可变集合创建方式
copyOf
方法,如ImmutableSet.copyOf(set)
;
of
方法,如ImmutableSet.of(“a”, “b”, “c”)
或 ImmutableMap.of(“a”, 1, “b”, 2)
;
Builder
工具,如
1 2 3 4 5
| public static final ImmutableSet<Color> GOOGLE_COLORS = ImmutableSet.<Color>builder() .addAll(WEBSAFE_COLORS) .add(new Color(0, 191, 255)) .build();
|
此外,对有序不可变集合来说,排序是在构造集合的时候完成的,如:
1
| ImmutableSortedSet.of("a", "b", "c", "a", "d", "b");
|
会在构造时就把元素排序为a, b, c, d
。
工具类创建方式
1 2
| List<TypeThatsTooLongForItsOwnGood> list = Lists.newArrayList(); Map<KeyType, LongishValueType> map = Maps.newLinkedHashMap();
|
- 用工厂方法模式,我们可以方便地在初始化时就指定起始元素。
1 2
| Set<Type> copySet = Sets.newHashSet(elements); List<String> theseElements = Lists.newArrayList("alpha", "beta", "gamma");
|
- Guava引入的新集合类型没有暴露原始构造器,也没有在工具类中提供初始化方法。而是直接在集合类中提供了静态工厂方法。
1
| Multiset<String> multiset = HashMultiset.create();
|