Java进阶之旅第五天

Java进阶之旅第五天

不可变集合

应用场景

  • 1.如果某个数据不能被修改,把它拷贝到不可变集合中是个很好的实践
  • 2.当集合对象被不可信的库调用时,不可变形式是安全的
  • 3.不可变集合不能修改,只能进行查询

获取方式

  • 在List,Set,Map接口中,都存在静态的of方法,可以获取一个不可变的集合
  • 方法: List.of(),Set.of(),Map.of()
  • 举例代码: List<String> list = List.of("1","2");

细节

  • 1.当我们要获取一个不可变的Set集合时,里面的参数一定要保证唯一性.(集合的元素具有唯一性)
  • 2.Map集合中键也不能重复
  • 3.Map.of()方法最多只能传递10对键值对,它的底层没有可变参数的方法(原因: 一个方法中不能存在多个可变参数)
  • 4.当我们想要传递多个键值对进入不可变Map集合中时,我们可以使用Map.ofEntries(Entry<? extends K, ? extends V>... entries),它的底层就是将一个键值对看成整体,然后改成可变参数
  • 5.由于Map.ofEntries()方法使用不方便,所以一般常用Map.copyOf()方法的参数是一个Map集合,返回值就是不可变集合

代码演示

java 复制代码
        //不可变集合
        System.out.println("---list.of---");
        List<String> list = List.of("1","2","3");
        for (String s : list) {
            System.out.println(s);
        }
        System.out.println("---set.of---");
        Set<String> set = Set.of("1","2","3");
        for (String s : set) {
            System.out.println(s);
        }
        System.out.println("---Map.of(键值对有限)---");
        Map<String, String> map = Map.of("小明","13","小红","15");
        Set<Map.Entry<String, String>> entries = map.entrySet();
        for (Map.Entry<String, String> entry : entries) {
            System.out.println(entry.getKey()+" = "+entry.getValue());
        }
        System.out.println("---Map.of(键值对个数会变化)---");
        HashMap<String, String> hm = new HashMap<>();
        hm.put("小明","13");
        hm.put("小红","15");
        hm.put("小黑","15");
        //最简单的方法Map.copyOf()
        System.out.println("---简单---");
        Map<String, String> map1 = Map.copyOf(hm);
        Set<Map.Entry<String, String>> entries1 = map1.entrySet();
        for (Map.Entry<String, String> entry : entries1) {
            System.out.println(entry.getKey()+" = "+entry.getValue());
        }
        //复杂一点的(copyOf()封装的内容(不理解可以尝试看看别的文章
        System.out.println("---复杂---");
        Map<String, String> entries2 = Map.ofEntries(hm.entrySet().toArray(new Map.Entry[0]));
        Set<Map.Entry<String, String>> entries3 = entries2.entrySet();
        for (Map.Entry<String, String> entry : entries3) {
            System.out.println(entry.getKey()+" = "+entry.getValue());
        }

结果

---list.of---
1
2
3
---set.of---
1
2
3
---Map.of(键值对有限)---
小明 = 13
小红 = 15
---Map.of(键值对个数会变化)---
---简单---
小红 = 15
小黑 = 15
小明 = 13
---复杂---
小红 = 15
小黑 = 15
小明 = 13
相关推荐
鲤籽鲲3 分钟前
C# Random 随机数 全面解析
android·java·c#
zquwei22 分钟前
SpringCloudGateway+Nacos注册与转发Netty+WebSocket
java·网络·分布式·后端·websocket·网络协议·spring
TT哇28 分钟前
*【每日一题 提高题】[蓝桥杯 2022 国 A] 选素数
java·算法·蓝桥杯
火烧屁屁啦1 小时前
【JavaEE进阶】初始Spring Web MVC
java·spring·java-ee
飞飞-躺着更舒服1 小时前
【QT】实现电子飞行显示器(改进版)
开发语言·qt
w_31234541 小时前
自定义一个maven骨架 | 最佳实践
java·maven·intellij-idea
岁岁岁平安1 小时前
spring学习(spring-DI(字符串或对象引用注入、集合注入)(XML配置))
java·学习·spring·依赖注入·集合注入·基本数据类型注入·引用数据类型注入
武昌库里写JAVA1 小时前
Java成长之路(一)--SpringBoot基础学习--SpringBoot代码测试
java·开发语言·spring boot·学习·课程设计
Q_19284999061 小时前
基于Spring Boot的九州美食城商户一体化系统
java·spring boot·后端
张国荣家的弟弟2 小时前
【Yonghong 企业日常问题 06】上传的文件不在白名单,修改allow.jar.digest属性添加允许上传的文件SH256值?
java·jar·bi