Google Guava Collections 使用介绍
2015-06-12 19:00
465 查看
Google Guava Collections(以下都简称为 Guava Collections)是 Java 集合框架增强和扩展。每个 Java 程序员都会在工作中使用各种数据结构,很多情况下 Java集合框架可以帮助你完成这类工作。但是在有些场合你使用了 Java集合框架 的 API,还是需要写很多代码来实现一些复杂逻辑,这时就可以尝试使用 Guava 集合来帮助你完成这些工作。这些高质量的 API 使你的代码更短,更易于阅读和修改,工作更加轻松。比如:
还在使用 Collections.unmodifiableXXX() ?Immutable Collections 才是不可修改的集合。
map规定key不能重复,value可以重复,但是更高一步要求:value也不能重复,这怎么办?难道每次使用put方法之前都要循环检查一次?NO ,BiMap来帮你,BiMap能够保证value也不会重复,否则放不进去。
同理:Set集合要求不能重复元素,但是我要重复的怎么办?Multiset来帮忙,Multiset能够放相同元素。
当然,没有Guava集合,仍然可以自己编写,或者在原理基础上添加函数,或者其他等等,但是Guava 集合提供的这些 API 经过精心设计,而且还有 25000 个单元测试来保障它的质量。所以我们没必要重新发明轮子。
BiMap:
BiMap 实现了 java.util.Map 接口,它的主要特点就是key和value都是一对一的关系,也就是key和value都永远不可能出现重复的情况。如果value中存在重复的元素,就是报告 IllegalArgumentException异常。现实当中可能会存在这样的逻辑,根据value值查找其key值,如下代码:
假如使用BiMap:
inverse是将map中的可以和value位置互相调换。
Multiset
我们知道,Set集合中是不能够放相同的元素的,但是如果在业务中允许这样的情况出现的时候,我们在没有Guava情况下应该是怎么实现的呢?或者说这从根本上违背了Set接口的约定,因为Set接口的javadoc中规定已经不能够放相同重复元素的,但是事实上,MultiSet并没有实现Set接口,Set接口的集合是这样保存的【a,b,bb,vv,f】,但是MultiSet是这样的:【a x 2,b x 2,bb x 2,vv x 2,f x 3】.
场景:一般来说,有重复元素需要放入Set中,我们都不用Set了,而是用List集合,这是可行的,但是更深一层需求:统计其中的相同元素的个数?这当然面部了需要使用循环来操作吧?至少你要写一个循环了。
但是MultiSet却提供了这么一个统计函数:count();
1.不用循环,2.不用写统计变量.3.可读性强。
这不是有很好啊.
好了,最近项目中使用了这个Guava,暂时第一阶段介绍到这里,后面详细介绍其他的类的用法,更多可以参考对用API吧!
还在使用 Collections.unmodifiableXXX() ?Immutable Collections 才是不可修改的集合。
map规定key不能重复,value可以重复,但是更高一步要求:value也不能重复,这怎么办?难道每次使用put方法之前都要循环检查一次?NO ,BiMap来帮你,BiMap能够保证value也不会重复,否则放不进去。
同理:Set集合要求不能重复元素,但是我要重复的怎么办?Multiset来帮忙,Multiset能够放相同元素。
当然,没有Guava集合,仍然可以自己编写,或者在原理基础上添加函数,或者其他等等,但是Guava 集合提供的这些 API 经过精心设计,而且还有 25000 个单元测试来保障它的质量。所以我们没必要重新发明轮子。
BiMap:
BiMap 实现了 java.util.Map 接口,它的主要特点就是key和value都是一对一的关系,也就是key和value都永远不可能出现重复的情况。如果value中存在重复的元素,就是报告 IllegalArgumentException异常。现实当中可能会存在这样的逻辑,根据value值查找其key值,如下代码:
for(Map.Entry<key, value> entry : map.entreSet()){ if(entry.getValue().equals(waitvalue)){ return entry.getKey(); } }
假如使用BiMap:
return biMap.inverse().get(waitvalue);
inverse是将map中的可以和value位置互相调换。
Multiset
我们知道,Set集合中是不能够放相同的元素的,但是如果在业务中允许这样的情况出现的时候,我们在没有Guava情况下应该是怎么实现的呢?或者说这从根本上违背了Set接口的约定,因为Set接口的javadoc中规定已经不能够放相同重复元素的,但是事实上,MultiSet并没有实现Set接口,Set接口的集合是这样保存的【a,b,bb,vv,f】,但是MultiSet是这样的:【a x 2,b x 2,bb x 2,vv x 2,f x 3】.
场景:一般来说,有重复元素需要放入Set中,我们都不用Set了,而是用List集合,这是可行的,但是更深一层需求:统计其中的相同元素的个数?这当然面部了需要使用循环来操作吧?至少你要写一个循环了。
但是MultiSet却提供了这么一个统计函数:count();
1.不用循环,2.不用写统计变量.3.可读性强。
这不是有很好啊.
好了,最近项目中使用了这个Guava,暂时第一阶段介绍到这里,后面详细介绍其他的类的用法,更多可以参考对用API吧!
相关文章推荐
- Android使用Google Map浅谈
- 专家解读:开源软件项目是否会被限制出口?
- 专家解读:开源软件项目是否会被限制出口?
- Google排名算法改变 不在以外部链为主
- Google Adsense 支票托收信息收集 (1-30-2007)
- Google Adsense常用技巧总结
- Google推广的十二点技巧
- google优化圣经做网站必备第1/3页
- Google AdSense英文高价关键词排行列表
- Google 统计图表(Flash)小插件
- 2月份停止Google Adsense下线推介 将在中国地区停止投放
- AVG 7.5.1.43 版本 序列号 集合
- 使用Google工具栏追踪 Blog 留言
- SQL Server游标的使用/关闭/释放/优化小结
- C#检查指定对象是否存在于ArrayList集合中的方法
- Google官方支持的NodeJS访问API,提供后台登录授权
- jquery repeater 模仿 Google 展开页面预览子视图
- C#中的集合用法分析
- 据说是Google首页的网页模块拖动代码