首页 > 编程语言 >设计模式 - Immutable 模式(Java不变集合类 vs Google Guava不变集合类)

设计模式 - Immutable 模式(Java不变集合类 vs Google Guava不变集合类)

时间:2023-11-10 16:56:21浏览次数:56  
标签:print List originalList add 集合 jdkUnmodifiableList 设计模式 不变

总结

JDK中的unmodifiableList的构造函数是对原始集合的浅拷贝,

而Guava.ImmutableList.copyOf是对原始集合的深拷贝

 

public class ImmutableDemo {
  public static void main(String[] args) {
    List<String> originalList = new ArrayList<>();
    originalList.add("a");
    originalList.add("b");
    originalList.add("c");

    List<String> jdkUnmodifiableList = Collections.unmodifiableList(originalList);
    List<String> guavaImmutableList = ImmutableList.copyOf(originalList);

    //jdkUnmodifiableList.add("d"); // 抛出UnsupportedOperationException
    // guavaImmutableList.add("d"); // 抛出UnsupportedOperationException
    originalList.add("d");

    print(originalList); // a b c d
    print(jdkUnmodifiableList); // a b c d  对原始list的修改,会影响java 不变集合类的结果
    print(guavaImmutableList); // a b c
  }

  private static void print(List<String> list) {
    for (String s : list) {
      System.out.print(s + " ");
    }
    System.out.println();
  }
}

 

标签:print,List,originalList,add,集合,jdkUnmodifiableList,设计模式,不变
From: https://www.cnblogs.com/frankcui/p/17824486.html

相关文章

  • JavaSE(十六)-集合Collection
    文章目录1.集合Collection1.1.集合的概念1.2.集合和数组的区别1.3.集合家族1.4.什么时候用什么样的集合2.Collection接口2.1.Collection接口概述2.2.学习集合对象2.1.Collection接口的共性方法2.1.1.增加2.1.2.删除2.1.3.修改2.1.4.判断2.1.5.获取2.1.6.练习:集合中添加自定义......
  • Go 设计模式中中介者模式
    鱼弦:内容合伙人、新星导师、全栈领域创作新星创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen) 中介者模式原理详细解释:中介者模式(MediatorPattern)是一种行为型设计模式,用于降低多个对象之间的直接通信,并使......
  • Go 设计模式中观察者模式
    鱼弦:内容合伙人、新星导师、全栈领域创作新星创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)          观察者模式原理详细解释:观察者模式(ObserverPattern)是一种行为型设计模式,它定义了......
  • 解锁设计模式的神秘面纱:编写无懈可击的代码之单例设计模式
    前言单例设计模式是23种设计模式中最常用的设计模式之一,无论是三方类库还是日常开发几乎都有单例设计模式的影子。单例设计模式提供了一种在多线程情况下保证实例唯一性的解决方案。单例设计模式虽然简单,但是实现方案却非常多,大体上有以下7种最常见的方式。饿汉模式所谓饿汉式,就是......
  • vue 使用elementui el-image 图片地址不变,图片不刷新问题
    问题:el-image图片地址不变,图片不刷新问题原因:在Web开发中,浏览器会缓存已经加载的静态资源(比如图片、CSS、JS文件),以提高页面加载速度,减轻服务器负担。当图片的源路径不变时,浏览器会对这些图片进行缓存,如果图片内容更新了,但是浏览器还是使用缓存,这时候就需要在图片源路径后......
  • mybatis使用id集合查询数据
    dao层intdelUser(@Param("menuId")IntegermenuId,@Param("idList")List<String>idList);xml层<deleteid="delUser">deleteFROMuser_role_menuWHEREmenu_id=#{menuId}ANDuser_idNOTIN<f......
  • java的设计模式之抽象工厂模式
    抽象工厂模式(AvstractFactory)在某些情况下,需要创建一系列相关或相互依赖的对象,这些对象属于一组相关的产品族。同时,系统需要保证这些产品族之间的一致性。如果直接在代码中创建这些对象,会使得代码与具体产品的细节紧密耦合,不利于后续的扩展和维护。抽象工厂模式提供了一个接口,用于......
  • Web开发工具大集合
    网站开发者的一大苦恼,就是有太多的浏览器要应付。幸亏世界上有一些聪明的人,能够研究出一大些方便编辑和调试网页代码的好工具。不过,要从不计其数的小工具里面找出合适的可真不容易。这篇文章列出了几个最好用的web开发工具,并指导你快速地激活、安装、使用他们。下面是工具列表:We......
  • 线程安全集合(JDK1.5之前和之后)、CopyOnWriteArrayList、CopyOnWriteArraySet
    JDK1.5之前JDK1.5之前:Collections.synchronizedList JDK1.5之后CopyOnWriteArrayList   CopyOnWriteArraySet    ......
  • 每日总结之设计模式:组合模式
    一、什么是组合模式组合模式也成为整体部分模式,是一种结构型设计模式。它将对象组合成树形的层次结构,用来表示“整体-部分”的关系。通过组合模式,我们可以使用相同的方式处理单个对象和多个对象组合。二、角色组成组件(Component):定义组合模式中所有对象共有的方法和属性。叶......