Java集合类汇总记录--guava篇
BiMap
HashBiMap<K,V>
实现了两份哈希表数据结构(本类独立实现)。分别负责两个方向的映射。
EnumBiMap<K,V>
两个EnumMap对象分别负责两个方向的映射。
EnumHashBiMap<K,V>
一个EnumMap对象负责K到V映射,一个HashMap对象负责V到K的影身。
MultiMap
HashMultimap<K,V>
使用HashMap<K,HashSet<V>>对象实现。
TreeMultimap<K,V>
使用TreeMap<K,TreeSet<V>>实现。
ArrayListMultimap
使用HashMap<K, ArrayList<V>>实现。
LinkedHashMultimap
使用LinkedHashMap<K, LinkedHashSet<V>>实现。
LinkedListMultimap<K,V>
使用HashMap<K, class KeyList<K,V>>实现。
KeyList是一个双向链表类。保存了一个特定的K。相应的全部Value的值。
另外,LinkedListMultimap还维护了一个由Map中全部的Entry组成的双向链表。
由两种双向链表保证迭代的顺序。
MultiSet
HashMultiset
使用HashMap<K, class Count>实现。Count是一个计数的类。
LinkedHashMultiset
使用LinkedHashMap<K, classCount>实现。
TreeMultiset
独立实现了一个AVL树。树的每一个节点保存了一个int类型的字段,表示元素数量。
ConcurrentHashMultiset
使用ConcurrentHashMap<E,AtomicInteger>实现。
EnumMultiset
使用EnumMap<E, Count>实现。
Table
ArrayTable<R,C,V>
固定大小的二维数组,创建的时候须要指定R和C的有效对象列表。以后不能改动。
内部包括三个数据结构:(1) V的数组,长度为行数量*列数量。(2) 从R对象到index的ImmutableMap。
(3)从C对象到index的ImmutableMap。
HashBasedTable<R,C,V>
内部实现上採用了HashMap<R,HashMap<C,V>>的形式。
TreeBasedTable<R,C,V>
内部实现上採用了TreeMap<R, TreeMap<C,V>>的形式。
MutableClassToInstanceMap
从类到类实例的映射。
TreeRangeSet/TreeRangeMap
特点:Key是一个区间。
仅仅读集合类
特点:一旦创建后就无法改动。
Interface |
JDK or Guava? |
Immutable Version |
Collection |
JDK |
ImmutableCollection |
List |
JDK |
ImmutableList |
Set |
JDK |
ImmutableSet |
SortedSet/NavigableSet |
JDK |
ImmutableSortedSet |
Map |
JDK |
ImmutableMap |
SortedMap |
JDK |
ImmutableSortedMap |
Multiset |
Guava |
ImmutableMultiset |
SortedMultiset |
Guava |
ImmutableSortedMultiset |
Multimap |
Guava |
ImmutableMultimap |
ListMultimap |
Guava |
ImmutableListMultimap |
SetMultimap |
Guava |
ImmutableSetMultimap |
BiMap |
Guava |
ImmutableBiMap |
ClassToInstanceMap |
Guava |
ImmutableClassToInstanceMap |
Table |
Guava |
ImmutableTable |
最新文章
- BZOJ 3489: A simple rmq problem
- SEO
- PHP中使用redis执行lua脚本示例
- 受限玻尔兹曼机(RBM)学习笔记(八)RBM 的评估
- POSIX线程--同时执行
- 利用Bundle在activity之间传递对象
- C语言——内存分配
- 在IT学习中的“认识论”
- [置顶] 【cocos2d-x入门实战】微信飞机大战之三:飞机要起飞了
- CenOS下安装Eclipse并配置PyDev
- mongodb 数据库导入.cvs文件时某些字段类型变成NumberLong的解决办法
- springMVC两种方式实现多文件上传及效率比较
- Eclipse连接SQL Server 2008数据库 以及问题总结
- JavaWeb(一)Servlet中乱码解决与转发和重定向的区别
- Sequelize 基本操作
- Git操作中crlf和lf冲突问题
- 解决安装fiddler后IE打开网页提示“代理服务器无响应”
- ERP,ARP瘦身并如何删除。
- could not connect to server: Connection refused (0x0000274D/10061)
- shiro用authc配置后登录成功后不能跳转到index页面