我的技术博客经常被流氓网站恶意爬取转载。请移步原文: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(1520))

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(110), "foo")

视图:asMapOfRanges()返回Map<Range<K>, V> subRangeMap(Range<K>)

实现:TreeRangeMap等

[Guava学习笔记]Collections: 不可变集合, 新集合类型的更多相关文章

  1. [Guava学习笔记]Collections: 集合工具类

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3861431.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...

  2. Guava学习笔记目录

    Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libra ...

  3. guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用

    guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用 1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection ...

  4. guava 学习笔记 使用瓜娃(guava)的选择和预判断使代码变得简洁

    guava 学习笔记 使用瓜娃(guava)的选择和预判断使代码变得简洁 1,本文翻译自 http://eclipsesource.com/blogs/2012/06/06/cleaner-code- ...

  5. SQL反模式学习笔记6 支持可变属性【实体-属性-值】

    目标:支持可变属性 反模式:使用泛型属性表.这种设计成为实体-属性-值(EAV),也可叫做开放架构.名-值对. 优点:通过增加一张额外的表,可以有以下好处 (1)表中的列很少: (2)新增属性时,不需 ...

  6. springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定

    springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...

  7. springmvc学习笔记(12)-springmvc注解开发之包装类型參数绑定

    springmvc学习笔记(12)-springmvc注解开发之包装类型參数绑定 标签: springmvc springmvc学习笔记12-springmvc注解开发之包装类型參数绑定 需求 实现方 ...

  8. Guava学习笔记:Guava新增集合类型-Multiset

    Guava引进了JDK里没有的,但是非常有用的一些新的集合类型.所有这些新集合类型都能和JDK里的集合平滑集成.Guava集合非常精准地实现了JDK定义的接口.Guava中定义的新集合有: Multi ...

  9. Guava学习笔记(一)概览

    Guava是谷歌开源的一套Java开发类库,以简洁的编程风格著称,提供了很多实用的工具类, 在之前的工作中应用过Collections API和Guava提供的Cache,不过对Guava没有一个系统 ...

随机推荐

  1. Web App 讲义教程

    http://www.csdn.net/tag/web%E5%BA%94%E7%94%A8

  2. Android游戏开发之主角的移动与地图的平滑滚动

    人物移动地图的平滑滚动处理 玩过rpg游戏的朋友应该都知道RPG的游戏地图一般都比较大 今天我和大家分享一下在RPG游戏中如何来处理超出手机屏幕大小的游戏地图. 如图所示为程序效果动画图 地图滚动的原 ...

  3. MapReduce原理讲解

    简介 本文主要介绍MapReduce V2的基本原理, 也是笔者在学习MR的学习笔记整理. 本文首先大概介绍下MRV2的客户端跟服务器交互的两个协议, 然后着重介绍MRV2的核心模块MRAppMast ...

  4. Python dictionary implementation

    Python dictionary implementation http://www.laurentluce.com/posts/python-dictionary-implementation/ ...

  5. IOC(依赖注入)原理

    IoC,直观地讲,就是容器控制程序之间的关系,而非传统实现中,由程序代码直接操控.这也就是所谓"控制反转"的概念所在.控制权由应用代码中转到了外部容器,控制权的转移是所谓反转.Io ...

  6. Linux下*.tar.bz2等文件如何解压--转

    如果tar不支持j这个参数就先用 bzip2 -d xxx.tar.bz2 把它解压成.tar文件,然后再用 tar xvf xxx.tar 拆包.压缩解压 linux下怎么解后缀名是gzip的文件? ...

  7. vs 行数

    工具->选项->文本编辑器->选择你用的语言,选中行号,即可!

  8. 美国L1签证和B1,E2签证的区别

    L1是跨国公司派驻工作人员到美国关联公司工作所需的签证.L1有两种: L1A是给管理人员的.L1B是给关键技术人员的.通过延期,L1A最长时间可达7年. L1B最长时间可达五年. 最初的L1申请,如果 ...

  9. poj1753解题报告(枚举、组合数)

    POJ 1753,题目链接http://poj.org/problem?id=1753 题意: 有4*4的正方形,每个格子要么是黑色,要么是白色,当把一个格子的颜色改变(黑->白或者白-> ...

  10. python(5)–sys模块

    sys.argv 命令行参数list, 第一个元素是程序本身路径 sys.exit(n) 退出程序,退出时输入信息n sys.version 获取python解释程序的版本信息 sys.maxint ...