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

作为一般规则,Guava集合非常精准地遵循了JDK接口契约。

1. Multiset

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

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

使用Multiset,直接上代码:

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)。

4. Table

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

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

最新文章

  1. ABP框架 - 启动配置
  2. Java判断访问设备为手机、微信、PC工具类
  3. grunt入门之grunt watch的使用
  4. ADO.NET 快速入门(十一):连接池
  5. transition过渡的趣玩
  6. LeetCode_Triangle
  7. volatile 和const 变量的使用
  8. C#实现冲顶大会辅助工具 (截图+图像识别+搜索)
  9. hdu 5750 Dertouzos 素数
  10. Bootstrap3 表格-响应式表格
  11. Python简单试题
  12. 人脸识别&amp;ORC的Demo
  13. PHP自动加载(__autoload和spl_autoload_register)
  14. 关系型数据库性能测试参考指标----SQL Server
  15. SSH 自动化安装部署遇到的问题
  16. VS 2013 scanf 报错问题
  17. 选择排序,C语言实现
  18. officeaddin开发-&gt;excel,word另存为html,xml,csv,txt设置编码格式
  19. win10更新后IE不见了
  20. python3.4 x86_64-linux-gnu-gcc Error

热门文章

  1. maven下载源代码,解决中文注释为乱码的问题
  2. ASP.NET伪静态
  3. ifconf和ifreq
  4. JSONP简单例子
  5. SIT与UAT的分别
  6. Hive之简单查询不启用MapReduce
  7. maven中央仓库
  8. PHP中的密码加密的解决方案
  9. ASP.NET 对字符串大小写切换
  10. HDUOJ------Lovekey