博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Google-Guava学习:不可变集合
阅读量:2506 次
发布时间:2019-05-11

本文共 2330 字,大约阅读时间需要 7 分钟。

不可变对象有很多优点,包括:

  • 当对象被不可信的库调用时,不可变形式是安全的;
  • 不可变对象被多个线程调用时,不存在竞态条件问题
  • 不可变集合不需要考虑变化,因此可以节省时间和空间。所有不可变的集合都比它们的可变形式有更好的内存利用率(分析和测试细节);
  • 不可变对象因为有固定不变,可以作为常量来安全使用。

JDK也提供了Collections.unmodifiableXXX方法把集合包装为不可变形式,但我们认为不够好:

  • 笨重而且累赘:不能舒适地用在所有想做防御性拷贝的场景;
  • 不安全:要保证没人通过原集合的引用进行修改,返回的集合才是事实上不可变的;
  • 低效:包装过的集合仍然保有可变集合的开销,比如并发修改的检查、散列表的额外空间,等等。

示例如下(ImmutableSet):

package com.cyq.test;import java.awt.Color;import java.util.Arrays;import java.util.List;import com.google.common.collect.ImmutableSet;import com.google.common.collect.ImmutableSortedSet;import com.google.common.collect.UnmodifiableIterator;/** * @author cyq * */public class ImmutableSetTest {	public ImmutableSetTest() {		//构造方法一: copyOf方法		List
list=Arrays.asList("1","3","2"); ImmutableSet
immutableSet1 = ImmutableSet.copyOf(list); immutableSet1.forEach(System.out::println); System.out.println("-----------------------"); //构造方法二: of方法 ImmutableSet
immutableSet2 = ImmutableSet.of("a", "c", "b"); immutableSet2.forEach(System.out::println); System.out.println("-----------------------"); //构造方法三: Builder工具 ImmutableSet
immutableSet3 = ImmutableSet.
builder() .add(new Color(0, 191, 255)) .add(new Color(12, 191, 255)) .add(new Color(14, 191, 255)) .build(); immutableSet3.forEach(System.out::println); System.out.println("-----------------------"); //此外,对有序不可变集合来说,排序是在构造集合的时候完成的,如: ImmutableSortedSet
sortedSet = ImmutableSortedSet.of("a", "c", "b", "a", "d", "b"); UnmodifiableIterator
iterator = sortedSet.iterator(); while(iterator.hasNext()){ System.out.println(iterator.next());//a, b, c, d } } public static void main(String[] args) { new ImmutableSetTest(); }}

关联可变集合和不可变集合:

可变集合接口 属于JDK还是Guava 不可变版本
Collection JDK ImmutableCollection
List JDK ImmutableList
Set JDK ImmutableSet
SortedSet/NavigableSet JDK ImmutableSortedSet
Map JDK ImmutableMap
SortedMap JDK ImmutableSortedMap
Multiset Guava ImmutableMultiset
SortedMultiset Guava ImmutableSortedMultiset
Multimap Guava ImmutableMultimap
ListMultimap Guava ImmutableListMultimap
SetMultimap Guava ImmutableSetMultimap
BiMap Guava ImmutableBiMap
ClassToInstanceMap Guava ImmutableClassToInstanceMap
Table Guava ImmutableTable

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。可以跳转到教程。

转载地址:http://lymgb.baihongyu.com/

你可能感兴趣的文章
poj 1845 Sumdiv (等比求和+逆元)
查看>>
iView 的后台管理系统简易模板 iview-admin-simple
查看>>
写一个自己的搜索引擎(1)
查看>>
NGINX、PHP-FPM开机自动启动
查看>>
python 递归求阶乘
查看>>
ERROR: child process failed, exited with error number 100
查看>>
Java计算器源代码
查看>>
SQLServer视图
查看>>
《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型...
查看>>
入门阶段
查看>>
游戏制作人的职能
查看>>
学生信息管理系统应用ios源码iPad版
查看>>
Android中使用http协议访问网络
查看>>
ASP.NET Core 菜鸟之路:从Startup.cs说起
查看>>
vs win32 & MFC 指针默认位置
查看>>
Join 与 CountDownLatch 之间的区别
查看>>
js存cookie
查看>>
vc6下dll调试
查看>>
Ubuntu apt常用命令
查看>>
struts2 配置(部分)
查看>>