[Guava学习笔记]Collections: 不可变集合, 新集合类型
我的技术博客经常被流氓网站恶意爬取转载。请移步原文:http://www.cnblogs.com/hamhog/p/3843386.html,享受整齐的排版、有效的链接、正确的代码缩进、更好的阅读体验。
不可变集合
不接受null值。
创建:ImmutableSet.copyOf(set); ImmutableMap.of(“a”, 1, “b”, 2);
public static final ImmutableSet<Color> GOOGLE_COLORS =
ImmutableSet.<Color>builder()
.addAll(WEBSAFE_COLORS)
.add(new Color(0, 191, 255))
.build();
可以有序(如ImmutableSortedSet),构造时完成排序。
所有不可变集合都有一个asList()方法,转成ImmutableList。
新集合类型
MultiSet:接受重复值的Set
get:count(E)对没有的元素返回0
set:add(E, int) remove(E, int) setCount(E, int)
视图:
-重复:iterator()会迭代重复的元素 size()返回所有元素总个数
-不重复:elementSet()不重复元素的集合 entrySet()其中包含的Entry支持getElement()和getCount()方法
实现:HashMultiset TreeMultiset可以用.subMultiset方法获取指定范围子集 LinkedHashMultiset保存插入顺序 ConcurrentHashMultiset ImmutableMultiset
MultiMap:一键多值
get:get(key)返回List或Set(浅拷贝)containsKey(key)值全移除后会返回false
set:put(K, V) putAll(K, Iterable<V>) remove(K, V) removeAll(K) replaceValues(K, Iterable<V>)
视图:
-重复:entries返回Collection<Map.Entry<K, V>>,包括重复键 keys所有键,键出现个数=重复次数 values()所有值 size()所有“键-单个值”个数
-不重复:asMap返回Map<K,Collection<V>> keySet不重复键
实现:ArrayListMultimap(值为ArrayList) HashMultimap(值为HashSet) LinkedListMultimap LinkedHashMultimap保存插入顺序 TreeMultimap ImmutableListMultimap ImmutableSetMultimap
BiMap:键值双向映射
get:inverse()反转,可以由值得键 values()返回Set
set:如果值重复会报IllegalArgumentException forcePut(key, value)强制替换
实现:HashBiMap ImmutableBiMap EnumBiMap EnumHashBiMap
Table:两键一值
set:put(row,column,cell)
视图:
-行:rowMap()以row为key rowKeySet() row(r)
-列:columnMap() columnKeySet() column(c)列会比行稍慢些。
-Cell:cellSet()元素为Table.Cell<R, C, V>
实现:HashBasedTable TreeBasedTable ImmutableTable ArrayTable要求构造时指定行列数,本质二维数组
RangeSet:区间集
相邻区间会合并。
set:add(Range.closedOpen(
15
,
20
))
get:contains(C) rangeContaining(C)没有返回null encloses(Range<C>) span()能包含所有区间的最小区间
视图:asRanges()返回Set<Range<C>> asSet(DiscreteDomain<C>)区间中所有元素
complement()补集 subRangeSet(Range<C>)交集
实现:TreeRangeSet等
RangeMap:键为区间
会拆分,不会合并。
set:put(Range.closed(
1
,
10
),
"foo"
)
视图:asMapOfRanges()返回Map<Range<K>, V> subRangeMap(Range<K>)
实现:TreeRangeMap等
[Guava学习笔记]Collections: 不可变集合, 新集合类型的更多相关文章
- [Guava学习笔记]Collections: 集合工具类
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3861431.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...
- Guava学习笔记目录
Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libra ...
- guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用
guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用 1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection ...
- guava 学习笔记 使用瓜娃(guava)的选择和预判断使代码变得简洁
guava 学习笔记 使用瓜娃(guava)的选择和预判断使代码变得简洁 1,本文翻译自 http://eclipsesource.com/blogs/2012/06/06/cleaner-code- ...
- SQL反模式学习笔记6 支持可变属性【实体-属性-值】
目标:支持可变属性 反模式:使用泛型属性表.这种设计成为实体-属性-值(EAV),也可叫做开放架构.名-值对. 优点:通过增加一张额外的表,可以有以下好处 (1)表中的列很少: (2)新增属性时,不需 ...
- springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定
springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...
- springmvc学习笔记(12)-springmvc注解开发之包装类型參数绑定
springmvc学习笔记(12)-springmvc注解开发之包装类型參数绑定 标签: springmvc springmvc学习笔记12-springmvc注解开发之包装类型參数绑定 需求 实现方 ...
- Guava学习笔记:Guava新增集合类型-Multiset
Guava引进了JDK里没有的,但是非常有用的一些新的集合类型.所有这些新集合类型都能和JDK里的集合平滑集成.Guava集合非常精准地实现了JDK定义的接口.Guava中定义的新集合有: Multi ...
- Guava学习笔记(一)概览
Guava是谷歌开源的一套Java开发类库,以简洁的编程风格著称,提供了很多实用的工具类, 在之前的工作中应用过Collections API和Guava提供的Cache,不过对Guava没有一个系统 ...
随机推荐
- Hibernate征途(六)之数量和关系映射
本来如果和关系模型一样,只需要一对一.一对多.多对多映射就够了,但是前面<Hibernate征途(四)之映射 序>中说到,对象模型中关联是有方向的,所以对一对多而言,就会产生一对多还是多对 ...
- 基于Linux的owncloud搭建
为了保证一个纯净的环境,我重新安装了一台centos系统 [root@localhost httpd-2.2.23]# lsb_release -a LSB Version: :base-4.0 ...
- cocos2d-x 资源路径研究
调用cc.FileUtils:getInstance():addSearchResolutionsOrder("src"); 加入�一个搜索路径,就能够直接载入src文件夹下的资源 ...
- C语言默认參数值的实现
from http://blog.csdn.net/pipisorry/article/details/25437893 C语言中没有參数默认值的概念,能够利用宏来模拟參数默认值: (对于有多个參数的 ...
- mysql并发复制系列 一:binlog组提交
http://blog.itpub.net/28218939/viewspace-1975809/ 作者:沃趣科技MySQL数据库工程师 麻鹏飞 MySQL Binary log在MySQL 5. ...
- visualvm连接服务器jvm进行监控
本地环境,mac: 服务器环境ubuntu: 直接运行jstatd命令,提示 Could not create remote object access denied ("java.util ...
- 打开Excel时提示"您尝试打开的文件**.xls的格式与文件扩展名指定的格式不一致"
问题描述: 系统安装了WPS时,Analyzer导出excel时候,会提示"您尝试打开的文件**.xls的格式与文件扩展名指定的格式不一致",这是Excel的安全问题, ...
- SparkSQLTest.scala
/** * Created by root on 9/7/15. */ import org.apache.spark.SparkConf import org.apache.spark.SparkC ...
- windows快捷操作
命令行启动或关闭VMWare服务: net start VMwareHostdVMAuthdServiceVMUSBArbService"VMware NAT Service"VM ...
- Lifting the Stone
我们需要把一块石头平稳的从地板上拿起来.石头的底面是多边形且各个部分的高度都一样,我们需要找出石头的重心. input 测试案例 T; 每组第一行给出N,表示定点数. 接下来N行,每行连个数,表示坐 ...