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

STM32H743IIT6实战指南:Cortex-M7高性能MCU从架构到调试 在嵌入式系统中,高性能微控制器(MCU)是复杂算法、实时控制与多媒体交互的核心载体。Cortex-M7内核凭借六级流水线、分支预测与双发射机制,将主频推升至480MHz,但深流水线也带来了对内存延迟的敏感,TCM与Cache缓存由此成为释放算力的关键。理解Cache一致性、DMA缓冲与电源域管理,是充分发挥这类芯片价值的前提。基于这些底层原理,开发者可以在电机FOC控制、音频PDM采集、LTDC图形界面等场景中,获得充足的性能余量。本文结合工程实践,系统梳理从时钟树配置、存储分配、Cache操作到PCB散热 阅读详情

https://blog.youkuaiyun.com/qq_27093465/article/details/65444622

先说明一下好处有哪些:
1,如果你想 new 一个空的 List ,而这个 List 以后也不会再添加元素(有大坑,看下面更新),

那么就用 Collections.emptyList() 好了。
new ArrayList() 或者 new LinkedList() 在创建的时候有会有初始大小,多少会占用一内存。
每次使用都new 一个空的list集合,浪费就积少成多,浪费就严重啦,就不好啦
2,为了编码的方便。
比如说一个方法返回类型是List,当没有任何结果的时候,返回null,有结果的时候,返回list集合列表。
那样的话,调用这个方法的地方,就需要进行null判断。使用emptyList这样的方法,可以方便方法调用者。返回的就不会是null,省去重复代码。

注意的地方:
这个空的集合是不能调用.add(),添加元素的。因为直接报异常。因为源码就是这么写的:直接抛异常。

哦,Collections里面没这么写,但是EmptyList继承了AbstractList这个抽象类,里面简单实现了部分集合框架的方法。
这里面的add方法最后调用的方法体,就是直接抛异常。
throw new UnsupportedOperationException();
这么解释add报异常就对啦。

下面简单看下这个源码:

    /**
     * Collections 类里面的方法如下,一步步往下看就是啦
     */
    public static final <T> List<T> emptyList() {
        return (List<T>) EMPTY_LIST;
    }
    //。。。。。
    /**
     * Collections 类里面的方法如下,一步步往下看就是啦
     */
    public static final List EMPTY_LIST = new EmptyList<>();
    //。。。。。
     /**
     * Collections里面的一个静态内部类
     */
    private static class EmptyList<E> extends AbstractList<E> implements RandomAccess, Serializable {
        private static final long serialVersionUID = 8842843931221139166L;
 
        public Iterator<E> iterator() {
            return emptyIterator();
        }
        public ListIterator<E> listIterator() {
            return emptyListIterator();
        }
 
        public int size() {return 0;}
        public boolean isEmpty() {return true;}
 
        public boolean contains(Object obj) {return false;}
        public boolean containsAll(Collection<?> c) { return c.isEmpty(); }
 
        public Object[] toArray() { return new Object[0]; }
 
        public <T> T[] toArray(T[] a) {
            if (a.length > 0)
                a[0] = null;
            return a;
        }
 
        public E get(int index) {
            throw new IndexOutOfBoundsException("Index: "+index);
        }
 
        public boolean equals(Object o) {
            return (o instanceof List) && ((List<?>)o).isEmpty();
        }
 
        public int hashCode() { return 1; }
 
        // Preserves singleton property
        private Object readResolve() {
            return EMPTY_LIST;
        }
    }

除了这个emptyList,之外,还有类似的,emptyMap,emptySet等等。具体看下图,都是一个套路。

(2017/08/28 更新)

看下面的代码,咱先弄个empty出来,然后,可能有需求要继续在这个空集合里面添加内容。那么,bug就来啦。

    /**
     * 测试这个空集合是某个Java bean 的某个属性的时候的操作,也是不能add的
     */
    private static void testModelEmptyField() {
        Car car = new Car();
        car.setBoys(Collections.emptyList());
        car.getBoys().add("sss");
    }
 
    /**
     * Collections.emptyMap()  返回的空集合是不能进行put的
     */
    private static void testEmptyMap() {
        Map<String,String> map = Collections.emptyMap();
        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ":"+ entry.getValue());
        }
        map.put("a","a");
        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ":"+ entry.getValue());
        }
    }
 
    /**
     * Collections.emptyList()  返回的空集合是不能进行add的
     */
    private static void testEmptyList() {
        List<String> list = Collections.emptyList();
        for (String s : list) {
            System.out.println(s);
        }
        //异常
        list.add("1");
        for (String s : list) {
            System.out.println(s);
        }
    }

具体出的bug,看下面的截图。


阿弥陀佛,算了 ,这个咱还是不用了吧。

很危险的,分分钟代码就bug啦。这个不好,不好。。。不用啦,了解下就得啦。
--------------------- 
作者:李学凯 
来源:优快云 
原文:https://blog.youkuaiyun.com/qq_27093465/article/details/65444622?utm_source=copy 
版权声明:本文为博主原创文章,转载请附上博文链接!

【Java】Java之Collections.emptyList()、emptySet()、emptyMap()的作用和好处以及要注意的地方 1.概述 2.好处 如果你想 new 一个空的 List ,而这个 List 以后也不会再添加元素,那么就用 Collections.emptyList() 好了。new ArrayList() 或者 new LinkedList() 在创建的时候有会有初始大小,多少会占用一内存。 每次使用都new 一个空的list集合,浪费就积少成多,浪费就严重啦,就不好啦 为了编码的方便。 比如说一个方法返回类型是List,当没有任何结果的时候,返回null,有结果的时候,返回list集合列表。 那样的话,调用这个. 阅读详情

相关推荐

InVEST模型实战指南:从水源涵养到热岛缓解的生态系统服务评估

本文提供了InVEST模型的实战指南,详细介绍了从环境搭建、数据预处理到核心模型应用的完整流程。通过水源涵养、碳存储、土壤保持和城市热岛缓解等核心模型的拆解,帮助生态学者与规划者系统量化评估生态系统服务,将复杂的生态价值转化为直观的空间数据与地图,为科学决策提供有力支撑。

weixin_29197051的博客 428

Redis查询所有key报错(empty list or set)

但是我在node.js中是能取到数据的。 仔细检查发现原来我node把key都创建在了redis的db2中,而redis-cli默认查询的是db0的内容,所以查询不到。 解决方法: **切换db: select 2 查询数据: keys *** 根据网上的方法select 2,但是就出现另外一个新问题。再尝试解决这个新问题 解决办法: redis集群版只使用db0,select命令虽然能够支持select 0。其他的db都会返回错误。 127.0.0.1:6379> select 0 OK 12.

weixin_38232096的博客 7798

从 0 到 1 构建 Graph RAG 系统:本地图谱 + 通义千问落地实践

本文介绍了一个基于知识图谱的检索增强生成系统(Graph RAG),该系统结合领域知识图谱、语义检索和大模型问答,旨在提供结构化、精准的技术问答服务。文章详细说明了项目背景、目标、核心技术架构以及实现方法,包括本地图谱构建、Neo4j数据库接入、语义检索和大模型集成等关键环节。该系统支持混合检索、多轮问答和知识图谱关联理解,能够有效减少大模型幻觉,提升问答的准确性和可解释性。文中还展示了核心代码结构和流程图,呈现了从文档加载到图谱构建再到问答生成的完整流程。该系统适用于需要处理复杂领域知识的研发和数据分析场

m0_58378112的博客 1399

java.util.Collections类——emptyList()方法

Collections是列表的工具类,其中有好多方便实用的方法。主要是对列表的查找、替换、排序、反转等操作。今天介绍一下emptyList()方法的使用,因为这个方法有一个大坑! 目录 1、emptyList()方法的使用 1、emptyList()方法的使用 通过java.util.Collections.emptyList()方法的相关源码可以得知它实际上...

常今 3万+

GEO数据挖掘实战:用R语言从GSE42872数据集中找到关键差异基因(附完整代码)

本文详细介绍了使用R语言从GSE42872数据集中挖掘关键差异基因的完整流程,包括数据下载、探针ID转换、差异表达分析和功能富集分析。通过实战代码演示,帮助生信研究者掌握GEO数据挖掘的核心技术,快速识别疾病相关基因并理解其生物学功能。

weixin_42625070的博客 365

Python爬虫之爬取并下载哔哩哔哩视频

它可以爬取并下载视频文件和音频文件!亲自使用过,太好用了。

2301_80124151的博客 3万+

数据库-Redis学习笔记

什么是NoSQL? NoSQL=Not Only SQL(不仅仅是SQL)泛指非关系型数据库的,随着web2.0互联网的诞生!传统的关系型数据库很难对付web2.0时代!尤其是超大规模的高并发的社区!NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。 NoSQL的优点/缺点 优点: - 高可扩展性 - 分布式计算 - 低成本 - 架构的灵活性,半结构化数据 - 没有复杂的关系 缺

关注网络安全、云原生安全 1万+

可调电源的电路设计

可调电源在电路调试中经常用到,可调电源分为两种2-5v(非0点可调)和0-5v(低至0点可调)可调两种。 对于第一种非0点电压的可调范围,其主要是由于开关电源或LDO芯片输出的最小电压为一个固定电压值,非0范围。因此通过调节开关电源或LDO端的反馈电阻的设计模型,其电压可调范围都与芯片的参考电压有关。 基于开关电源的可调电压设计电路 因芯片U2的输出参考电压VSENSE管脚为1.22v。因此,通过调节可调电阻R8的数值,其芯片输出的最低电压一定不小于1.22v。当然此种方案是手动可调输出电压的设计,如

weixin_42257266的博客 9729

Java Collections.emptyList() 方法的使用及注意事项

java Collections.emptyList方法的使用及注意事项作用:好处:示例1示例2示例3总结:Collections.emptyList()方法,主要用于封装已经保存好的数据集合,不会在发生改变的情况 作用: 返回一个空的List(使用前提是不会再对返回的list进行增加和删除操作) 好处: 1,new ArrayList()创建时有初始大小10,占用内存,emptyList()不用创建一个新的对象,可以减少内存开销; 2,方法返回一个emptyList()时,不会报空指针异常,如果直接返回N

qq_45752401的博客 3540

数据结构——滑动窗口

入:下标为 i 的元素进入窗口,更新相关统计量。如果 i < k−1 则重复第一步更新:更新答案。一般是更新最大值 / 最小值出:下标为 i−k+1 的元素离开窗口,更新相关统计量✔1. 定长子串中元音的最大数目✔2. 找到一个数字的 K 美丽值✔4. 子数组的最大平均数 |方法一:前缀和方法二:滑动窗口7. 得到 K 个黑块的最少涂色次数8. 爱生气的书店老板9. 几乎唯一子数组的最大和10. 长度为 K 子数组中的最大和11. 可获得的最大点数12. 最少交换次数来组合所有的1 ||

qq_68915288的博客 762

精通 Android NDK/JNI:从入门到精通实战与面试精粹

在Android开发中,

郑伟强dev的专栏 144

简简单单入个Redis的门

Redis介绍 Redis是一种key-value的存储系统,它是一种nosql(Not Only [SQL])非关系型的数据库,它支持string(字符串)、list(链表)、set(集合)、hash(哈希类型)和zset(sorted set --有序集合)数据类型,这些数据类型有着丰富的操作,且均具有原子性。 Redis基本指令 ...

随机的未知——用已知去面对未知 1079

某物data魔改与变种算法还原(含加解密Py纯算)

某物data加解密、设备指纹魔改、变异、自定义加密分析与纯算还原

吴秋霖的博客 1278

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

先说明一下好处有哪些: 1,如果你想 new 一个空的 List ,而这个 List 以后也不会再添加元素(有大坑,看下面更新), 那么就用 Collections.emptyList() 好了。 new ArrayList() 或者 new LinkedList() 在创建的时候有会有初始大小,多少会占用一内存。 每次使用都new 一个空的list集合,浪费就积少成多,浪费就严重啦,就不好啦 ...

请叫我大师兄 2万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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

先说明一下好处有哪些:1,如果你想 new 一个空的 List ,而这个 List 以后也不会再添加元素,那么就用 Collections.emptyList() 好了。new ArrayList() 或者 new LinkedList() 在创建的时候有会有初始大小,多少会占用一内存。每次使用都new 一个空的list集合,浪费就积少成多,浪费就严重啦,就不好啦2,为了编码的方便。比如说一个方法...

weixin_36474001的博客 258

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

前言 Java中ArrayList或许是我们平时开发最常用的一个集合类了,其次是HashMap,基本上满足了业务开发的绝大多数场景。今天要说的就是Collections.emptyList()和new ArrayList()的区别以及注意事项。 先来一段代码 运行main方法,会有如下输出: 很显然,Collections.emptyList()会抛出“java.lang.UnsupportedOperationException”的异常。 使用及区别 日常开发中,我们经常会写一个方法,返回一个集合。当

qq_43842093的博客 2607

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: eclipse手动添加本地jar包到本地maven仓库
下一篇: eclipse中svn的怎样使用,提交和更新
周末去看海
博客等级 码龄9年 50粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值