Java不可变ArrayList[通俗易懂]

Java不可变ArrayList[通俗易懂]集合类在Java中是引用类型,在操作的时候可能不经意间被程序修改,一些初级开发经常会犯类似的错误。这里我们讨论下如何让ArrayList不可改变。本文将演示以下几种方式: JDK Guava Apache Commons Collection4 JDK给我们提供了一个很简便的方…

集合类在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));
    }


image.png

我们可以看到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);

最后

主要说了几种创建不可变列表的方法,做了简单的演示,开发中有时会碰到的场景之一。

希望有帮助

参考

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13428.html

(0)

相关推荐

  • NGINX下运行静态资源、PHP应用及支持HTTPS等配置详解

    NGINX下运行静态资源、PHP应用及支持HTTPS等配置详解本文主要记录了当前博客下针对静态资源、旧站301跳转、Https配置等一系列内容,nginx以server块来确定某一部分虚拟域名及相关配置,所以我们可以在server块中配置server_name虚拟域名,rewrite重写,return跳转以及其他的一些ssl配置等操作

    2023-08-06
    127
  • Python Regexes:快速匹配和替换文本

    Python Regexes:快速匹配和替换文本无论你是数据处理工程师、Web开发人员还是在日常办公中频繁处理文本,Python Regexes都是你必须掌握的技能之一。本文将深入介绍Python Regexes的概念、语法和实际应用,以及如何在Python中使用正则表达式来快速匹配和替换文本。

    2023-12-27
    105
  • 如何查看Python路径?

    如何查看Python路径?Python是一种高级编程语言,广泛应用于AI、数据分析、Web开发等领域。在使用Python进行编程开发时,经常需要查看Python的路径信息,以便确认安装路径、查找模块、调试代码等。本文将从多个方面介绍如何查看Python路径。

    2024-06-09
    55
  • mysql(二)

    mysql(二)1 外键的创建(多对多)学生表,课程表,和成绩表之间的关系 2.表查询的执行顺序(重点中的重点)非常重要 from——where——group by——having——select——distinct

    2022-12-29
    151
  • Centos7.6 Mysql数据库自动备份配置[通俗易懂]

    Centos7.6 Mysql数据库自动备份配置[通俗易懂]1、查看磁盘空间情况 执行 df -h 选择剩余空间最大的目录 (以/目录为例) 2、创建备份目录: cd / mkdir backup cd backup 3、创建备份Shell脚本: vim mo

    2022-12-30
    150
  • Python Future概述

    Python Future概述Python语言自问世以来,一直得到了广泛的应用和支持,其在多种领域和行业中都有着重要的地位。而这个支持和应用的趋势还在不断加强,我们能够看到许多的技术、工具、框架、语法等等,都在不断的壮大和完善。在这篇文章中,我们将探讨Python的未来发展趋势,了解在众多的技术中,Python将如何持续的发展和壮大。

    2024-05-22
    58
  • Java 最常见的 200+ 面试题:面试必备

    Java 最常见的 200+ 面试题:面试必备这份面试清单是我从 2015 年做了 TeamLeader 之后开始收集的,一方面是给公司招聘用,另一方面是想用它来挖掘我在 Java 技术栈中的技术盲点,然后修复和完善它,以此来提高自己的技术水平。虽然我从 2009 年就开始参加编程工作了,但依旧觉得还有很多东西要学,当然学…

    2023-08-15
    119
  • Servlet过滤器(Filter)介绍和使用[亲测有效]

    Servlet过滤器(Filter)介绍和使用[亲测有效]通过实现Filter接口,我们可以实现一个拦截器,从而实现对目标请求的拦截。Filter本质上也是一个Java程序,它和Servlet一样也是被Servlet容器调用和执行的。 我们在实现了拦截器之后,在web.xml中注册并指定需要拦截的请求。当Servlet容器调用某个Se…

    2023-07-26
    141

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注