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. 提升篇——SELINUX相关介绍
  2. centos6.3下yum安装redis
  3. (-215:Assertion failed) dst.data == (uchar*)dst_ptr in function 'cvShowImage'
  4. Sublime Text 3在ubuntu12.10下无法中文输入的解决方案
  5. 查询mysql视图_MySQL数据库简介及常用命令
  6. CCNA-第十五篇-DHCP配置+SDN介绍(最后一章)
  7. PHP获取服务器端的相关信息
  8. KerasSeq2seqGeneration:基于seq2seq模型的文本生成任务项目
  9. 深化创客教育,用人工智能创造艺术
  10. Win11如何自动关机 windows11自动关机的设置方法
  11. 1.13 Linux创建与删除用户
  12. 惠普打印机P1108驱动无法安装怎么处理?
  13. CRM是什么?CRM客户管理系统主要的功能,作用,特点分别有哪些?
  14. python下载哪个好_tensorflow用python哪个版本更好?
  15. 环境工程学(整理知识点)
  16. 雅诗兰黛公司宣布线上业务部门领导层更新
  17. win10设置护眼颜色(豆沙绿)
  18. win10电脑找不到WLAN的解决方法(不显示附近wifi)
  19. SonrLint常见解决方案
  20. Linux:生成core的几种方式

热门文章

  1. MYSQL:changer buffer 和 redo log
  2. 吉林大学人工智能学院计算机,吉林大学成立人工智能学院
  3. android渲染是skia与egl,opengl和skia哪个快 游戏电脑问题解决分享!
  4. Arduino Mind+编程 轮询读取多个软串口数据的方法讨论
  5. 公司倒闭后不注销有什么后果?不注销公司的几大结果
  6. Linux内核中的算法和数据结构
  7. 用php蓝天采集器抓取今日头条ajax的文章内容
  8. OPPO Pad 评测怎么样
  9. 苹果电脑(mac)上远程连接windows的软件
  10. 不定代词both/either/neither的区别