Guava 4 - Collections - 2 & range
Guava 新添了一些有用的集合类型,比如 Multiset,MultiMap,BiMap 等。
Multiset
Multiset 继承自 Collection,所以不是 set,List 有序可重复,Set 无序但不可重复,Multiset 介于 List 和 Set 之间,它无序但可重复,它有几个特性:
- 看成无序的 ArrayList
- add(E) 添加单个给定元素
- iterator() 返回一个迭代器,包含 Multiset 的所有元素(包括重复的元素)
- size()返回所有元素的总个数(包括重复的元素)
- 看成 Map<E, Integer> ,键为元素,值为计数
- count(Object) 返回给定元素的计数。HashMultiset.count 的复杂度为O(1),TreeMultiset.count 的复杂度为 O(log n)
- entrySet() 返回 Set<Multiset.Entry
>,和 Map 的 entrySet 类似 - elementSet() 返回所有不重复元素的 Set
,和 Map 的 keySet() 类似 - 所有 Multiset 实现的内存消耗随着不重复元素的个数线性增长。
1 | // Multiset 用来统计元素相当方便 |
MultiMap
一般一个键对应多个值,采用 Map<K, List
1 | // 一般存储 Map<K, List<V>> 写法 |
BiMap
BiMap 是键和值都唯一的 map,不但适合以 key 查找 value,而且适合以 value 查找 key。
1 | // 假设 userId 与 userName 是一一对应的关系 |
此外还有 Table,ClassToInstanceMap,RangeSet,RangeMap 等新增功能性集合,不再整理。
Range
guava 提供了 Range 区间运算,这里更推荐使用 JDK 8 的 range 配合 stream。
1 | // range是半开区间,左闭右开 |
Title: Guava 4 - Collections - 2 & range
Author: mjd507
Date: 2018-06-19
Last Update: 2024-01-27
Blog Link: https://mjd507.github.io/2018/06/19/Guava-Guide-4/
Copyright Declaration: This station is mainly used to sort out incomprehensible knowledge. I have not fully mastered most of the content. Please refer carefully.