Java不可变ArrayList
集合类在Java中是引用类型,在操作的时候可能不经意间被程序修改,一些初级开发经常会犯类似的错误。这里我们讨论下如何让ArrayList不可改变。本文将演示以下几种方式:
- JDK
- Guava
- Apache Commons Collection4
JDK
JDK给我们提供了一个很简便的方式从集合中获取一个不可变集合
Collections.unmodifiableList(List<? extends T> list)
我们可以简单的看一下其实现方式:
public static <T> List<T> unmodifiableList(List<? extends T> list) { return (list instanceof RandomAccess ? new UnmodifiableRandomAccessList<>(list) : new UnmodifiableList<>(list)); }
我们可以看到UnmodifiableList内对集合的操作都会抛出异常,所以返回的集合,列表对象是不可变的。
Guava
guava提供了一个创建不可变列表的对象ImmutableList
ImmutableList.copyOf(list);
我们看个案例
public class App { public static void main(String[] args) { List<Integer> givenList = Arrays.asList(1, 2, 3, 4, 5, 6); List<Integer> immutableList = ImmutableList.copyOf(givenList); immutableList.add(10); } } // 会抛出异常 Exception in thread "main" java.lang.UnsupportedOperationException at com.google.common.collect.ImmutableCollection.add(ImmutableCollection.java:225) at me.aihe.App.main(App.java:19)
Commons Collection
Apache Commons给我们提供了很多工具类,Collection也是其中的一个工具库,也提供了一个简单的API来创建不可变列表。
ListUtils.unmodifiableList(list);
然后演示一个简单的案例,会抛出UnsupportedOperationException。
public class App { public static void main(String[] args) { List<Integer> givenList = Arrays.asList(1, 2, 3, 4, 5, 6); List<Integer> integers = ListUtils.unmodifiableList(givenList); integers.add(10); } } //结果抛出异常 Exception in thread "main" java.lang.UnsupportedOperationException at org.apache.commons.collections4.list.UnmodifiableList.add(UnmodifiableList.java:83) at me.aihe.App.main(App.java:19)
小结
//JDK Collections.unmodifiableList(List<? extends T> list) //Guava ImmutableList.copyOf(list); //Commons Collection4 ListUtils.unmodifiableList(list);
最后
主要说了几种创建不可变列表的方法,做了简单的演示,开发中有时会碰到的场景之一。
希望有帮助
参考
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Intel Parallel Studio XE 2019 破解版 含图文教程
ParallelStudio XE 2019专业版包括完整的编译器和库选择。使用性能分析器,优化的矢量化,线程原型设计以及内存和线程的调试工具来构建您的功能。新版Parallel Studio XE 2019,这是其高性能计算工具套件的最新版本,适用于C / C ++,Fortran和Python开发人员使用和增强其应用程序的性能。闪电小编这里带来的是Intel Parallel Studio XE 2019最新版安装包,内含授权激活工具,可以完美激活Intel Parallel Studio XE 2019,需要的就来下载吧! Intel Parallel Studio XE 2019 破解版 含图文教程 授权:共享软件 类型:国产软件 语言:简体中文 大小:未知 日期:2018-09-16 环境:Win2003WinXPWi... 下载 代码软件性能的新突破 这套全面的开发工具使用矢量化,多线程,多节点并行化和内存优化等最新技术,使代码的构建和现代化变得更加简单。它使C,C ++,Fortran和Python *软件开发人员能够: 创建更快的代码:提升可在当前和未来英特尔平台上扩展...
- 下一篇
Python全栈 Web(jQuery 外卖套餐)
说实话 前端这些东西 真就是一个字 背就完事了 背的越多 就越牛逼 1.jQuery动画 1.基本显示 / 隐藏 $obj.show() / $obj.show(执行时长); $obj.hide() / $obj.hide(执行时长); 2.滑动式显示 / 隐藏 $obj.slideDown() / $obj.slideDown(执行时长); $obj.slideUp() / $obj.slideUp(执行时长); 3.淡入淡出式显示 / 隐藏 $obj.fadeIn() / $obj.fadeIn(执行时长); $obj.fadeOut() / $obj.fadeOut(执行时长); 2.jQuery插件 1.下载插件并引入(jquery,插件文件,css文件) 2.结合当前网页修改css 3.去插件中修改数据(替换图片/图片名称) 无聊的前端三剑客终
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- Red5直播服务器,属于Java语言的直播服务器
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS6,7,8上安装Nginx,支持https2.0的开启