guava -- 新集合类型

Guava引入了不少JDK没有的、但有用的新集合类型。这些新类型是为了和JDK集合框架共存,而没有往JDK集合抽象中硬塞其余概念。程序员

做为通常规则,Guava集合很是精准地遵循了JDK接口契约。框架

1. Multiset

统计一个词在文档中出现了多少次,传统的作法是这样的:3d

Multiset和Set的区别就是能够保存多个相同的对象。在JDK中,List和Set有一个基本的区别,就是List能够包含多个相同对象,且是有顺序的,而Set不能有重复,且不保证顺序(有些实现有顺序,例如LinkedHashSet和SortedSet等)因此Multiset占据了List和Set之间的一个灰色地带:容许重复,可是不保证顺序。对象

使用Multiset,直接上代码:blog

2. Multimap

每一个有经验的Java程序员都在某处实现过Map<K, List<V>>或Map<K, Set<V>>。索引

Guava的Multimap能够很容易地把一个键映射到多个值。接口

3. BiMap

 传统上,实现键值对的双向映射须要维护两个单独的map,并保持它们间的同步。但这种方式很容易出错,并且对于值已经在map中的状况,会变得很是混乱。文档

BiMap<K, V>是特殊的Map:同步

  • 能够用 inverse()反转BiMap<K, V>的键值映射
  • 保证值是惟一的,所以values()返回Set而不是普通的Collection

在BiMap中,若是你想把键映射到已经存在的值,会抛出IllegalArgumentException异常。若是对特定值,你想要强制替换它的键,请使用BiMap.forcePut(key, value)。io

4. Table

一般来讲,当你想使用多个键作索引的时候,你可能会用相似Map<FirstName, Map<LastName, Person>>的实现,这种方式很丑陋,使用上也不友好。

Guava为此提供了新集合类型Table,它有两个支持全部类型的键:”行”和”列”。

相关文章
相关标签/搜索