• Java中 创建不可变集合


    常规写法
    以往我们创建一些不可变集合的时候,通常是这样写的:

    // 不可变的Set
    Set set = new HashSet<>();
    set.add("a");
    set.add("b");
    set.add("c");
    set = Collections.unmodifiableSet(set);

    // 不可变的List
    List list = new ArrayList<>();
    list.add(1);
    list.add(2);
    list.add(3);
    list = Collections.unmodifiableList(list);
    Java8的写法
    Java 8的时候,利用Stream API还能简化一下,可以演变成这样:

    Set set = Collections.unmodifiableSet(Stream.of("a", "b", "c").collect(toSet()));
    List list = Collections.unmodifiableList(Stream.of(1, 2, 3).collect(toList()));
    Java9的写法
    而现在到了Java 9,这一操作变的更为简单,只需要这样:

    Set set = Set.of("a", "b", "c");
    List list = List.of(1, 2, 3);

    同时,对于一下更复杂的集合也一样支持,比如Map类型也可以这样写:

    Map map = Map.of("a", "1", "b", "2", "c", "3");
    就是要注意下,Map.of的参数是key和value成对出现的,所以参数数量一定是偶数:

    Map.of()
    Map.of(k1, v1)
    Map.of(k1, v1, k2, v2)
    Map.of(k1, v1, k2, v2, k3, v3)
    ...
    与asList的区别
    看到这里,可能有的人会问了,之前不是对于集合有asXxx这样的方便方法了么?他们有啥区别吗?

    这里就以 List.of 和 Arrays.asList 为例,给大家列一下它们的异同:

    Java 9中推出 List.of 创建的是不可变集合,而 Arrays.asList 是可变集合

    List.of 和 Arrays.asList 都不允许add和remove元素,但 Arrays.asList 可以调用set更改值,而 List.of 不可以,会报 java.lang.UnsupportedOperationException 异常

    List.of 中不允许有null值, Arrays.asList 中可以有null值
     

  • 相关阅读:
    编译实战 | 手摸手教你在Windows环境下运行Redis6.x
    Oracle相关文件
    3.测试教程 - 基础篇
    Java Reader类简介说明
    Spring 常见面试题总结
    Rust编译的时候报出link.exe not found错误
    RK3566调试eeprom
    跨时钟域握手信号的实现(Verilog)
    人工智能前沿——无人自动驾驶技术
    vmware虚拟机开机之后一直闪烁
  • 原文地址:https://blog.csdn.net/zdwzzu2006/article/details/133787915