Collections的emptyList() emptyMap() emptySet()

在看Collections时看到这三个方法

Collections.emptySet()
Collections.emptyList()
Collections.emptyMap()

会生成指定类型的空List Set Map,而且是不可变的,如进行add()操作会报java.lang.UnsupportedOperationException,返回这样不可变的空集合有什么作用呢?

  • 方法内部会返回static final成员,创建后相当于常量可重复引用,当需要使用一个空集合时不用new去分配内存,比如一个测试用例API接口就需要一个Map<String,Object>,若此时只需要一个空map跑用例,直接用Collections.emptyMap()作为参数即可

  • 防止空指针出现,当你的代码需要一个集合而这个集合可能不存在,此时尽量使用空集合而不是null,因为集合一个常用的操作就是遍历,你不知道你返回的结果在后续会不会被遍历。比如一个查询步骤返回一个集合,当返回一个空集合是就可以用这类方法,还可以防止后续对这个空集合再做add操作

参考Effactive JAVA 43条:返回0长度的数组或者集合,而不是null

  • 对于泛型集合无需指定其类型参数,如Map<Foo, Comparable<? extends Bar>> fooBarMap = new HashMap<Foo, Comparable<? extends Bar>>(); 只要Map<Foo, Comparable<? extends Bar>> fooBarMap = Collections.emptyMap();即可,起到简化代码作用

  • 使用集合的一个好习惯就是使用 immutable collection,参考 http://stackoverflow.com/questions/214714/mutable-vs-immutable-objects/214718#214718

    @Test
    public void test_emptySet()
    {Set<String> s1 = new HashSet<String>();Set<File> s2 = new LinkedHashSet<File>();Set<Integer> s3 = new TreeSet<Integer>();assertTrue(s1.equals(Collections.emptySet()));assertTrue(s2.equals(Collections.emptySet()));assertTrue(s3.equals(Collections.emptySet()));s1.add("abc");assertFalse(s1.equals(Collections.emptySet()));s1.clear();assertTrue(s1.equals(Collections.emptySet()));
    }
    

参考

http://www.cnblogs.com/booth-sun/p/5625764.html

https://coderanch.com/t/536728/java/java/Collections-emptySet-Collections-emptyList-Collections

http://stackoverflow.com/questions/14846920/collections-emptymap-vs-new-hashmap

Collections的emptyList() emptyMap() emptySet()相关推荐

  1. ArrayList()和Collections.emptyList()的区别emptyList()、emptySet()、emptyMap()的作用和好处以及要注意的地方

    前言 Java中ArrayList或许是我们平时开发最常用的一个集合类了,其次是HashMap,基本上满足了业务开发的绝大多数场景.今天要说的就是Collections.emptyList()和new ...

  2. Collections 的 emptyList()、emptyMap() 、emptySet()

    Collections.emptyList() Collections.emptyMap() Collections.emptySet() 参考链接: https://stackoverflow.co ...

  3. java emptylist_Java之Collections.emptyList()、emptySet()、emptyMap()的作用和好处以及要注意的地方...

    先说明一下好处有哪些: 1,如果你想 new 一个空的 List ,而这个 List 以后也不会再添加元素,那么就用 Collections.emptyList() 好了. new ArrayList ...

  4. 【Java】Java之Collections.emptyList()、emptySet()、emptyMap()的作用和好处以及要注意的地方

    1.概述 2.好处 如果你想 new 一个空的 List ,而这个 List 以后也不会再添加元素,那么就用 Collections.emptyList() 好了.new ArrayList() 或者 ...

  5. Java之Collections.emptyList()、emptySet()、emptyMap()的作用和好处以及要注意的地方。

    https://blog.csdn.net/qq_27093465/article/details/65444622

  6. java emptylist_Java中Collections的emptyList、EMPTY_LIST详解

    原创:https://mingyang.blog.csdn.net/ 在写方法的时候可能结果集不存在,需要返回null,在调用这个方法的地方就要做一个null判断,很繁琐,容易出问题,这个时候就可以使 ...

  7. Java集合之Arrays和Collections

    转载自:http://liuguoquan727.github.io/2015/12/18/Java%E9%9B%86%E5%90%88%E4%B9%8BArrays%E5%92%8CCollecti ...

  8. [转载] java避免空指针异常_第1部分:在现代Java应用程序中避免空指针异常

    参考链接: Java的instanceof及其应用 java避免空指针异常 空做与不做 (Null do's and don'ts) In the talk Null References: The ...

  9. java10 WeakHashMap

    WeakHashMap: 对象所占用的区域是不能直接操作的,都是通过引用来操作.引用分类: 1.强引用(StrongReference):gc(垃圾回收机制)运行时不回收.例如字符串常量池.字符串虽然 ...

最新文章

  1. 机器学习“七宗罪”:影响可信度的七个常见错误
  2. 更好的内存管理-jemalloc (redis 默认使用的)
  3. 【学习】009 NIO编程
  4. WebKit和Chrome源码分析
  5. 在线 Sql Server 服务无法启动的解决办法
  6. PHP利用P3P实现跨域
  7. Spring中的ModelAndView
  8. SAP UI5 jQuery.sap.getModulePath 的工作原理
  9. AVS 分像素运动估计优化算法
  10. AOJ GRL_1_A: Single Source Shortest Path (Dijktra算法求单源最短路径,邻接表)
  11. error LNK2019: unresolve d external symbol _DriverEntry@8 referenced in function _GsDriverEntry@8
  12. Java从入门到精通 第12章 类的封装、继承与多态
  13. java房屋出租预约看房系统springboot ssm带房东租客
  14. 编译器优化级别O3引入的bug
  15. Python 爬虫模拟器
  16. 苹果cmsV10暗色系在线动漫影视网站模板
  17. deepin 蓝牙适配器 安装
  18. 阿里云视觉智能API,核心技术一站共享!
  19. C++ 算法篇 动态规划----区间动态规划
  20. 简单的机械键盘换轴过程(非热插拔)

热门文章

  1. [Demo示例]爬取豆瓣FM个人收藏歌曲“红心列表”
  2. svn: E170001报错的原因以及解决方案
  3. Gdal库计算形心方法。
  4. 计算机恢复工具有哪些,电脑数据恢复软件选哪个?这三款恢复工具不容错过
  5. 洛克王国服务器维护,洛克王国3月6日服务器公告 剧情更新百年大潮
  6. Ocr识别之扫描笔应用
  7. java POI 插入图片到Excel文件
  8. android扫描不到手机蓝牙,Android上的蓝牙:StartDiscovery无法正常工作。无法扫描设备...
  9. centos8安装python3.6_Centos下安装Python3.6
  10. linux环境安装mysql8.0以及使用Navicat连接Linux中的mysql