实战小技巧10:不可变容器

简介: 不可变容器,看着好像在实际的业务中不怎么会用到,但实则不然,相信每个小伙伴都用过,或者看到过下面的代码

不可变容器,看着好像在实际的业务中不怎么会用到,但实则不然,相信每个小伙伴都用过,或者看到过下面的代码


Collections.emptyList();
Collections.emptyMap();
复制代码

今天我们来介绍一下如何使用不可变容器,以及使用时的注意事项


1. JDK不可变容器



java原生提供了一些不可变容器,它们最大的特点就是不支持添加、删除、修改容器内的值


Collections.emptyXxx空容器


Collections.emptyMap();
Collections.emptyList();
Collections.emptySet();
复制代码


上面三个是最常用的几个了,通常当我们一个方法的返回结果定义为容器类型时,可能为了避免npe,在返回空容器时,会如此使用


除了上面这几个空的不可变容器之外,还有


  • UnmodifiableList
  • UnmodifiableMap
  • UnmodifiableSet


它们的使用姿势,通常是借助Collections来实现


List<Integer> list = Collections.unmodifiableList(Arrays.asList(1, 2, 3));
复制代码


如上面创建的List,就不支持set/remove等修改操作

使用不可变容容器,最大的好处就是基于它的不可修改特性,来实现公用,且不会被污染


  • 所以一个自然而然能想到的应用场景就是 全局共享的配置


2. Guava不可变容器



上面是jdk提供的不可变容器,相比较与它们,在实际的项目中,使用Gauva的不可变容器的可能更多


  • ImmutableXxx;不可变容器
List<Integer> list = ImmutableList.of(1, 2, 3);
Set<Integer> set = ImmutableSet.of(1, 2, 3);
Map<String, Integer> map = ImmutableMap.of("hello", 1, "world", 2);
复制代码


上面是最常见的三个容器对应的不可变型

从使用角度来看,初始化非常方便(相比较与jdk版而言)


3. 注意事项



不可变容器虽好,但是使用不当也是很坑的;就我个人的一个观点


  • 如果是应用内的接口方法,容器传参,返回容器时,尽量不要使用不可变容器;因为你没办法保证别人拿到你的返回容器之后,会对它进行什么操作
  • 如果是对外提供返回结果,特别是null的场景,使用不可变的空容器优于返回null
  • 不可变容器,用于全局公用资源,共享配置参数;多线程的数据传递时,属于比较合适的场景



相关文章
|
9月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
829 52
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
缓存 监控 前端开发
告别卡顿!3大前端性能优化魔法 + CSS容器查询实战
告别卡顿!3大前端性能优化魔法 + CSS容器查询实战
351 95
|
运维 监控 数据可视化
容器化部署革命:Docker实战指南
容器化部署革命:Docker实战指南
|
9月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
Ubuntu Linux Docker
Docker容器的实战讲解
这只是Docker的冰山一角,但是我希望这个简单的例子能帮助你理解Docker的基本概念和使用方法。Docker是一个强大的工具,它可以帮助你更有效地开发、部署和运行应用。
329 27
|
人工智能 安全 API
容器化AI模型的安全防护实战:代码示例与最佳实践
本文基于前文探讨的容器化AI模型安全威胁,通过代码示例展示如何在实际项目中实现多层次的安全防护措施。以一个基于TensorFlow的图像分类模型为例,介绍了输入验证、模型加密、API认证和日志记录的具体实现方法,并结合最佳实践,如使用安全容器镜像、限制权限、网络隔离等,帮助构建更安全的AI服务。
|
机器学习/深度学习 人工智能 Kubernetes
容器化AI模型部署实战:从训练到推理
在上一篇中,我们探讨了AI技术如何赋能容器化生态。本篇聚焦于AI模型的容器化部署,通过图像分类任务实例,详细介绍了从模型训练到推理服务的完整流程。使用PyTorch训练CNN模型,Docker打包镜像,并借助Kubernetes进行编排和部署,最终通过FastAPI提供推理服务。容器化技术极大提升了AI模型部署的便利性和管理效率,未来将成为主流趋势。
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
508 3
实战~如何组织一个多容器项目docker-compose
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
1504 8