JavaSE——集合16:不可变集合

目录

一、不可变集合基本介绍

二、创建不可变的List集合

三、创建不可变的Set集合

四、创建不可变的Map集合

(一)最多10个键值对 

(二) 键值对的数量超过10个

五、总结


一、不可变集合基本介绍

不可变集合:不可以被修改的集合。包括长度、内容等。

应用场景:1.如果某个数据不能被修改,把它防御性地拷贝到不可变集合中是个很好的实践。

                  2.当集合对象被不可信的库调用时,不可变形式是安全的。

简单理解:不想让别人修改集合中的内容。

二、创建不可变的List集合

public class ImmutableDemo1 {public static void main(String[] args) {/*创建不可变的List集合"张三", "李四", "王五", "赵六"*///一旦创建完毕之后,是无法进行修改的,在下面的代码中,只能进行查询操作List<String> list = List.of("张三", "李四", "王五", "赵六");System.out.println(list.get(0));System.out.println(list.get(1));System.out.println(list.get(2));System.out.println(list.get(3));System.out.println("---------------------------");for (String s : list) {System.out.println(s);}System.out.println("---------------------------");Iterator<String> it = list.iterator();while (it.hasNext()) {String s = it.next();System.out.println(s);}System.out.println("---------------------------");for (int i = 0; i < list.size(); i++) {String s = list.get(i);System.out.println(s);}System.out.println("---------------------------");// list.remove("李四");// list.add("aaa");// list.set(0,"aaa");}
}

三、创建不可变的Set集合

当我们要获取一个不可变的Set集合时,里面的参数一定要保证唯一性。

public class ImmutableDemo2 {public static void main(String[] args) {/*创建不可变的Set集合"张三", "李四", "王五", "赵六"               */// 一旦创建完毕之后,是无法进行修改的,在下面的代码中,只能进行查询操作Set<String> set = Set.of("张三", "张三", "李四", "王五", "赵六");for (String s : set) {System.out.println(s);}System.out.println("-----------------------");Iterator<String> it = set.iterator();while (it.hasNext()) {String s = it.next();System.out.println(s);}System.out.println("-----------------------");//set.remove("王五");}
}

四、创建不可变的Map集合

  1. 键是不能重复的
  2. Map里面的of方法,参数是有上限的,最多只能传递20个参数,10个键值对
  3. 如果我们要传递多个键值对对象,数量大于10个,在Map接口中还有一个方法

(一)最多10个键值对 

public class ImmutableDemo3 {public static void main(String[] args) {// 一旦创建完毕之后,是无法进行修改的,在下面的代码中,只能进行查询操作Map<String, String> map = Map.of("张三", "南京", "李四", "北京","王五", "上海", "赵六", "广州", "孙七", "深圳","周八", "杭州", "吴九", "宁波", "郑十", "苏州","刘一", "无锡", "陈二", "嘉兴");Set<String> keys = map.keySet();for (String key : keys) {String value = map.get(key);System.out.println(key + "=" + value);}System.out.println("--------------------------");Set<Map.Entry<String, String>> entries = map.entrySet();for (Map.Entry<String, String> entry : entries) {String key = entry.getKey();String value = entry.getValue();System.out.println(key + "=" + value);}System.out.println("--------------------------");}
}

(二) 键值对的数量超过10个

public class ImmutableDemo4 {public static void main(String[] args) {// 1.创建一个普通的Map集合HashMap<String, String> hm = new HashMap<>();hm.put("张三", "南京");hm.put("李四", "北京");hm.put("王五", "上海");hm.put("赵六", "北京");hm.put("孙七", "深圳");hm.put("周八", "杭州");hm.put("吴九", "宁波");hm.put("郑十", "苏州");hm.put("刘一", "无锡");hm.put("陈二", "嘉兴");hm.put("aaa", "111");// 2.利用上面的数据来获取一个不可变的集合/*//获取到所有的键值对对象(Entry对象)Set<Map.Entry<String, String>> entries = hm.entrySet();//把entries变成一个数组Map.Entry[] arr1 = new Map.Entry[0];//toArray方法在底层会比较集合的长度跟数组的长度两者的大小//如果集合的长度 > 数组的长度 :数据在数组中放不下,此时会根据实际数据的个数,重新创建数组//如果集合的长度 <= 数组的长度:数据在数组中放的下,此时不会创建新的数组,而是直接用Map.Entry[] arr2 = entries.toArray(arr1);//不可变的map集合Map map = Map.ofEntries(arr2);map.put("bbb","222");*/// Map<Object, Object> map = Map.ofEntries(hm.entrySet().toArray(new Map.Entry[0]));// JDK10之后的特性Map<String, String> map = Map.copyOf(hm);// map.put("bbb","222");}
}

五、总结

  1. 不可变集合的特点:定义完成后不可以修改、添加、删除
  2. 创建不可变集合的方法:List、Set、Map接口中,都存在of方法可以创建不可变集合
  3. 三种方式的细节:
  • List:直接用
  • Set:元素不能重复
  • Map:元素不能重复,键值对数量最多是10个;JDK10以后,超过10个用copyOf方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/56993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【iOS】使用AFNetworking更方便实现网络请求

目录 前言 如何使用AFNetworing实现网络请求 使用单例 进行网络申请 结语 前言 OC中原生的网络请求流程非常麻烦&#xff0c;通常是以下流程&#xff1a; 创建NSURL对象确定请求地址。使用NSURL创建NSURLRequest对象&#xff0c;可设置请求方法、请求头等。创建NSURLSess…

如何修改MAC地址破解网络无线网络限制-担心别人蹭网,路由器设置MAC地址过滤,限定了能访问无线网络的网卡地址-供大家学习参考

路由器都设置了MAC地址过滤&#xff0c;也就是限定了能访问无线网络的网卡的MAC地址。因为无线路由器不一定由自己控制&#xff0c;所以当更换了笔记本或者更换了无线网卡的时候&#xff0c;也许就上不了网了。我们可以修改网卡的MAC地址实现上网。 下载&#xff1a;https://do…

各种查询sql介绍

1. 关联查询&#xff08;JOIN&#xff09; 关联查询用于从多个表中检索数据。它基于两个或多个表之间的共同字段&#xff08;通常是主键和外键&#xff09;来组合数据。 内连接&#xff08;INNER JOIN&#xff09;&#xff1a; sql SELECT a.name, b.order_date FROM custome…

计算机网络——CDN

空间编码例子&#xff1a;不是发送N个相同颜色值&#xff0c;而是仅发送2个值&#xff0c;颜色和重复个数 时间编码例子&#xff1a;不是发送i1帧的全部编码&#xff0c;而是仅发送帧i差别的地方 视频播放时&#xff0c;先下载manifest file文件——>解析&#xff08;不…

机器学习与神经网络:科技的星辰大海

前提 近日&#xff0c;2024年诺贝尔物理学奖颁发给了机器学习与神经网络领域的研究者&#xff0c;这是历史上首次出现这样的情况。这项奖项原本只授予对自然现象和物质的物理学研究作出重大贡献的科学家&#xff0c;如今却将全球范围内对机器学习和神经网络的研究和开发作为了一…

Python库numpy之五

Python库numpy之五 数据类型数组类型和类型之间的转换数值数据类型字符串和字节的数据类型 数据类型 数组类型和类型之间的转换 NumPy 比 Python 支持更多种类的数值类型。 NumPy 数值类型是 numpy.dtype对象的实例&#xff0c;每个对象都具有独特的特征。可以使用 numpy 顶…

【Kuberntes】k8s权限管理

文章目录 权限管理概述核心概念配置RBAC创建Role和ClusterRole创建RoleBinding和ClusterRoleBinding 默认角色和角色绑定权限的实现注意事项 如何在 Kubernetes 中实现 RBAC 的细粒度权限控制&#xff1f;1. Role和ClusterRole2. RoleBinding和ClusterRoleBinding3. 配置RBAC4.…

gaussdb 基础管理 数据库 表 用户 模式 权限 存储过程

数据库database #创建数据库&#xff0c;指定字符集UTF8&#xff0c;缺省情况下新数据库将通过复制标准系统数据库template0来创建&#xff0c;且仅支持使用template0来创建。 CREATE DATABASE devdb ENCODING UTF8 template template0; CREATE DATABASE testdb; 标识符的命名…

Faster R-CNN模型微调检测航拍图像中的小物体

1. 项目简介 本项目的目标是基于Faster R-CNN模型对航拍图像中的小物体进行检测和识别。航拍图像通常具有视角广、分辨率高、小目标密集且物体尺寸较小的特点&#xff0c;因此检测难度较大。传统的目标检测模型在处理小物体时&#xff0c;容易受到物体尺寸、分辨率及背景复杂度…

HTML DOM 简介

HTML DOM 简介 1. 什么是HTML DOM? HTML DOM(文档对象模型)是一种用于HTML的应用程序编程接口(API)。它定义了访问和操作HTML文档的标准方法,将HTML文档表示为树结构,其中每个节点都是文档中的一个对象。通过DOM,开发者可以轻松地添加、删除和修改页面上的元素和内容…

CMake与Qt4/Qt5的结合使用指南

CMake与Qt4/Qt5的结合使用指南 一、同时使用Qt 4和Qt 5二、Qt构建工具2.1 AUTOMOC2.2 AUTOUIC2.3 AUTORCC 三、<ORIGIN>_autogen目标四、Visual Studio生成器五、Windows上的qtmain.lib六、其他文章推荐 在CMake中&#xff0c;您可以方便地找到并使用Qt 4和Qt 5库。Qt 4库…

大数据查询引擎之Tez

Apache Tez 是一个用于大数据处理的分布式计算框架&#xff0c;旨在提高 Hadoop 的 MapReduce 计算引擎的效率和性能。它是一个面向 DAG&#xff08;有向无环图&#xff09;任务执行的框架&#xff0c;主要用于大规模数据处理场景中&#xff0c;特别是在 Apache Hadoop 生态系统…

elementUI,设置日期,只能选择过去的和今天的日期

在 el-date-picker 组件中加&#xff1a;:picker-options"pickerOptions" <el-form-item label"票据生成日期&#xff1a;"> <el-date-picker v-model"date1" type"daterange" range-separator"至" value-format&…

Java中的函数式接口

在Java 8及以后的版本中&#xff0c;函数式编程成为了一个重要的特性。函数式接口是实现函数式编程的基础&#xff0c;它们允许你以声明式的方式处理数据集合&#xff0c;简化代码&#xff0c;提高代码的可读性和可维护性。本文将深入探讨Java中的函数式接口&#xff0c;包括它…

大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

轻量级可视化数据分析报表,分组汇总表!

什么是可视化分组汇总表&#xff1f; 可视化分组汇总表&#xff0c;是一种结合了数据分组、聚合计算与视觉呈现功能的数据分析展示功能。它能够按照指定的维度&#xff08;如时间、地区、产品类型等&#xff09;对数据进行分组&#xff0c;还能自动计算各组的统计指标&#xf…

【力扣 | SQL题 | 每日4题】力扣1164,3293,1308,1270

4 mid&#xff0c;四题都比较简单&#xff0c;没什么难度。 1. 力扣1164&#xff1a;指定日期的产品价格 1.1 题目&#xff1a; 产品数据表: Products ------------------------ | Column Name | Type | ------------------------ | product_id | int | | new_p…

mongodb-7.0.14分片副本集超详细部署

mongodb介绍&#xff1a; 是最常用的nosql数据库&#xff0c;在数据库排名中已经上升到了前六。这篇文章介绍如何搭建高可用的mongodb&#xff08;分片副本&#xff09;集群。 环境准备 系统系统 BC 21.10 三台服务器&#xff1a;192.168.123.247/248/249 安装包&#xff1a…

SQL Injection | SQL 注入 —— 报错盲注

关注这个漏洞的其他相关笔记&#xff1a;SQL 注入漏洞 - 学习手册-CSDN博客 0x01&#xff1a;报错盲注 —— 理论篇 报错盲注&#xff08;Error-Based Blind SQL Injection&#xff09;是一种常见的 SQL 注入技术&#xff0c;适用于那些页面不会直接显示后端处理结果的查询方式…

安装nginx实现多ip访问多网站

关闭防火墙并停selinux&#xff1a; 挂载&#xff1a; 安装nginx&#xff1a; 判断nginx是否成功启动&#xff1a; 打开nmtui并添加多个ip&#xff1a; 重启nmtui&#xff1a; 查看多ip是否配置成功: 配置文件&#xff1a; 创建文件&#xff1a; 根据配置在主机创建数据文件&a…