使用Map.clear()、List.clear()方法,清空时注意!
对 Map、List 对象进行清空操作时,常常会使用 clear() 方法。
例如,清空 Map
Map map = new HashMap();map.put("key1","value1");map.put("key2","value2");System.out.println(map.size()); //2map.clear();System.out.println(map.size()); //0
换做 List 也是同样的用法
List list = new ArrayList<>();list.add("1");list.add("2");System.out.println(list.size()); //2list.clear();System.out.println(list.size()); //0
但是!!!
本文想要说的是,需要注意,如果使用clear()方法, Map被清空的同时,原本对Map的引用会一起被清空!!!
代码举例:
List list = new ArrayList<>();Map map = new HashMap();List listTemp = new ArrayList<>();for(int i=0; i<3; i++){map.clear();for(int j=0; j<3; j++){listTemp.add("i="+i+";j="+j);}map.put(""+i,listTemp);list.add(map);}System.out.println(list);
这段代码也很简单,两层循环。
最里层向 listTemp 中添加数据,循环三次;
外层向 map 中添加 listTemp,key 值为循环次数的值;
每一次外层的循环都会清空之前循环的 map;
每一次外层的循环将 map 添加到外层 list 中。
根据这段代码,我们期待的结果是:
[{
0 = [i = 0;j = 0, i = 0;j = 1, i = 0;j = 2, i = 1;j = 0, i = 1;j = 1, i = 1;j = 2, i = 2;j = 0, i = 2;j = 1, i = 2;j = 2]
}, {
1 = [i = 0;j = 0, i = 0;j = 1, i = 0;j = 2, i = 1;j = 0, i = 1;j = 1, i = 1;j = 2, i = 2;j = 0, i = 2;j = 1, i = 2;j = 2]
}, {
2 = [i = 0;j = 0, i = 0;j = 1, i = 0;j = 2, i = 1;j = 0, i = 1;j = 1, i = 1;j = 2, i = 2;j = 0, i = 2;j = 1, i = 2;j = 2]
}]
而实际上,我们能够得到的结果是:
[{
2 = [i = 0;j = 0, i = 0;j = 1, i = 0;j = 2, i = 1;j = 0, i = 1;j = 1, i = 1;j = 2, i = 2;j = 0, i = 2;j = 1, i = 2;j = 2]
}, {
2 = [i = 0;j = 0, i = 0;j = 1, i = 0;j = 2, i = 1;j = 0, i = 1;j = 1, i = 1;j = 2, i = 2;j = 0, i = 2;j = 1, i = 2;j = 2]
}, {
2 = [i = 0;j = 0, i = 0;j = 1, i = 0;j = 2, i = 1;j = 0, i = 1;j = 1, i = 1;j = 2, i = 2;j = 0, i = 2;j = 1, i = 2;j = 2]
}]
可以看到,三条数据完全相同。
而这意味着,我们在使用clear()清空了Map之后,再次对Map进行赋值的时候,添加了原Map的List,其中元素随之发生变化。
另写部分代码验证:
Map map = new HashMap();map.put("1","11");map.put("2","22");List<Map> list = new ArrayList<>();list.add(map);System.out.println(list);map.clear();map.put("3","33");System.out.println(list);map.put("2","22");System.out.println(list);
控制台输出为
[{1=11, 2=22}]
[{3=33}]
[{2=22, 3=33}]
由此,验证了我们的想法。
Map 是这样,List 也不例外。
将上述例子稍作改动,如下:
List<Map> list = new ArrayList<>();List listTemp = new ArrayList<>();for(int i=0; i<3; i++){listTemp.clear();for(int j=0; j<3; j++){listTemp.add("i="+i+";j="+j);}Map map = new HashMap();map.put(""+i,listTemp);list.add(map);}System.out.println(list);
这一次的执行结果如下:
[{
0 = [i = 2;j = 0, i = 2;j = 1, i = 2;j = 2]
}, {
1 = [i = 2;j = 0, i = 2;j = 1, i = 2;j = 2]
}, {
2 = [i = 2;j = 0, i = 2;j = 1, i = 2;j = 2]
}]
可以看到在外层 list中,每个map元素内部的 listTemp 都是相同的,说明同样被更新了。
总结
我们也总结得出:Map、List 若被引用,那么后续的清空、修改、增加等操作,仍会影响到原本的引用。
使用的时候要注意这一点!
相关文章:
使用Map.clear()、List.clear()方法,清空时注意!
对 Map、List 对象进行清空操作时,常常会使用 clear() 方法。 例如,清空 Map Map map new HashMap();map.put("key1","value1");map.put("key2","value2");System.out.println(map.size()); //2map.clear();Sy…...
如何配置Pycharm服务器并结合内网穿透工具实现远程开发
🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,…...
c++中的以及链表的基础使用
c中的& 通俗的立减即为对一个变量起别名。(是和指针有区别的) 以下为两个示例程序: 通过&代替了以往对地址的传递。从而实现了对a和b的交换。 p为a的别名,对p操作即为对a操作。故最后输出a的值为10. 链表的基础应用 链…...
vue v-for循环拖拽排序,实现数组选中的数据拖拽后对应的子数据也进行重新排序
如下图所有,有个需求更新, 实现拖拽。 1,当新增了测点类型的时候每个对应的回路子数据都会新增对应的测点类型。 2,当拖动测点类型结束的时候对应的回路里面的内容也会跟着测点类型的排序自动排序 其实很简单,只要会了…...
google cloud storage批量文件下载
背景: 一些google cloud storage文件的下载是需要付费的,一些是不需要的,不需要的直接点击下方的下载按钮即可,但是常常存在大量的文件下载,挨个下载有点费时间而且占内存,所以我尝试了批量下载到HPC&…...
easyexcel 3.0.x 版本实现指定列 锁定以及指定列隐藏
1:效果示例 2:代码示例: UnLockCell.java package com.example.juc.zhujie;/*** Author * Date Created in 2023/12/19 10:09* DESCRIPTION:* Version V1.0*/import java.lang.annotation.*;/*** 用于标记锁定哪些列不需要锁定* author 12…...
whistle代理+mock轻松解决“页面端“测试接口没数据难题
0、whistle是什么?怎么用? 自行百度,此处不再赘述! 1、示例演示(交易订单测试) 背景和痛点最近在测试一个小需求,需要涉及订单侧服务商品库侧服务库存侧服务财务侧线下交易服务。痛点主要在订…...
HNU-计算机网络-实验5(自选)-安全相关编程实验
计算机网络 课程综合实验安全相关编程实验(RUST) 计科210X 甘晴void 202108010XXX 【前言】 这个《课程综合实验》是21级开始新加的实验,之前都没有。具体的可以看实验指导书,是用的19级同学的毕设。我完成的这个实验需要一点点R…...
Ubuntu搭建OpenCV环境(C++)
Ubuntu搭建OpenCV环境(C) 文章目录 Ubuntu搭建OpenCV环境(C)一、环境介绍二、依赖安装三、安装包下载四、opencv安装五、测试 一、环境介绍 虚拟机 :VMware 15.5 OS : Ubuntu 20.04 opencv 版本 : 4.9.0 操作系统安装本文不再赘述&#x…...
R语言【paleobioDB】——pbdb_orig_ext():绘制随着时间变化而出现的新类群
Package paleobioDB version 0.7.0 paleobioDB 包在2020年已经停止更新,该包依赖PBDB v1 API。 可以选择在Index of /src/contrib/Archive/paleobioDB (r-project.org)下载安装包后,执行本地安装。 Usage pbdb_orig_ext (data, rank, temporal_extent…...
Vue模板的理解和使用
Vue模板 Vue.js 的模板是一种声明性的语法,用于将数据渲染进 DOM(文档对象模型)。它们使开发者能够以直观的方式声明式地描述用户界面应该如何根据应用程序数据的变化动态显示。 Vue模板的主要特点包括: 数据绑定: …...
mysql group_concat函数使用
CREATE TABLE aa (id int(11) DEFAULT NULL,name varchar(50) DEFAULT NULL ) ENGINEInnoDB DEFAULT CHARSETutf8mb41、基本查询 SELECT * FROM aa;2、以id分组,把name字段的值打印在一行,逗号分隔(默认) select id,group_concat(name) from aa group …...
并发编程之三大特性及JMM内存模型
目录 原子性 如何保证原子性 可见性 如何保证可见性 有序性 如何保证有序性 Java内存模型(JMM内存模型) Java内存模型的一些关键概念: 主内存与工作内存交互协议 Java内存模型通过以下手段来确保多线程程序的正确性: 锁机制 volatile volat…...
centos系统设置runlevel为5
在 CentOS 系统中,可以使用以下步骤将运行级别(runlevel)设置为 5: 1. 打开终端或 SSH 连接到 CentOS 服务器。 2. 以 root 用户身份登录。 3. 运行以下命令来编辑 /etc/inittab 文件: shell sudo vi /etc/inittab…...
关于群晖ARPL界面能出现ip但是使用Synology Assistant搜索不到ip问题 及解决方法
文章引用ing304 频道文章:https://qun.qq.com/qqweb/qunpro/share?_wv3&_wwv128&appChannelshare&inviteCode20jx8dPsU2z&contentID1m4NKs&businessType2&from181174&shareSource5&bizka 前言 当进入该界面后 提示IP无法访问&a…...
mysql Linux系统云服务器配置远程访问
mysql Linux系统云服务器配置远程访问 1.安装mysql 服务器 2.配置远程登录用户权限 3.进行远程登录,并访问数据库 1.安装mysql 服务器 首先先安装一下云服务器 sudo apt-get install mysql-server安装好之后,我们直接以root用户登录: …...
使用WAF防御网络上的隐蔽威胁之SQL注入攻击
SQL注入攻击是一种普遍存在且危害巨大的网络安全威胁,它允许攻击者通过执行恶意的SQL语句来操纵或破坏数据库。 这种攻击不仅能够读取敏感数据,还可能用于添加、修改或删除数据库中的记录。因此,了解SQL注入攻击的机制及其防御策略对于保护网…...
【书生·浦语】大模型实战营——第五次课程作业
基础作业——使用LMDeploy 以本地对话、网页Gradio、API服务中的一种方式部署InternLM-Chat-7B模型,生成300字的小故事 环境准备 除了安装所需依赖之后,重要的是进行模型转化(转换成TurboMind格式),这里需要注意转化命…...
Unity | 渡鸦避难所-7 | 攻击碰撞检测
1 前言 英雄的宝剑并非只是装饰物,利剑出鞘时可以对怪物造成伤害。同样,怪物挥出铁拳时也会对英雄造成伤害。当然,都有同样的前提:在武器碰到对方的情况下,才会造成伤害。利用物理引擎,可以轻松的实现碰撞…...
Linux Mii management/mdio子系统分析之一 总体概述
Linux Mii management/mdio子系统分析之一 总体概述 (转载)原文链接:https://blog.csdn.net/u014044624/article/details/123303099 从本章开始,我们介绍linux的mii management对应的mdio子模块,该模块主要用于管理phy…...
2025届毕业生推荐的六大AI学术方案解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 不能让文章有明显人工智能生成的迹象,得从好些方面着手。用词处,别用…...
LAV Filters专业配置进阶指南:深度解析开源解码器架构与性能优化
LAV Filters专业配置进阶指南:深度解析开源解码器架构与性能优化 【免费下载链接】LAVFilters LAV Filters - Open-Source DirectShow Media Splitter and Decoders 项目地址: https://gitcode.com/gh_mirrors/la/LAVFilters LAV Filters是一套基于FFmpeg的高…...
intv_ai_mk11基础教程:打开即用的Llama文本生成器使用全流程详解
intv_ai_mk11基础教程:打开即用的Llama文本生成器使用全流程详解 1. 快速了解intv_ai_mk11 intv_ai_mk11是一个基于Llama架构的中等规模文本生成模型,特别适合日常办公和内容创作场景。想象一下,你有一个随时待命的文字助手,可以…...
Qwen3-VL-2B-Instruct保姆级教程:视觉对话机器人部署
Qwen3-VL-2B-Instruct保姆级教程:视觉对话机器人部署 1. 环境准备与快速部署 想要体验AI视觉对话的神奇能力吗?Qwen3-VL-2B-Instruct让你不用昂贵的显卡也能拥有一个能"看懂"图片的智能助手。这个教程将手把手带你完成整个部署过程ÿ…...
MGeo地址结构化实战:对接RPA机器人自动填写政务表格中的标准地址字段
MGeo地址结构化实战:对接RPA机器人自动填写政务表格中的标准地址字段 1. 引言:当RPA机器人遇上“不标准”的地址 想象一下这个场景:你是一家政务服务中心的技术负责人,每天有成百上千份表格需要处理。其中,地址信息填…...
成都宠博会的发展历程
1.背景与起源创办背景:随着国内宠物经济的蓬勃发展,成都以其浓厚的宠物文化和“宠物友好城市”的定位,为宠博会的诞生提供了沃土。展会旨在满足中西部地区日益增长的行业交流与消费需求。首届信息:根据文档提及的“从2012年到2025…...
MeteorSeed
从0构建WAV文件:读懂计算机文件的本质 虽然接触计算机有一段时间了,但是我的视野一直局限于一个较小的范围之内,往往只能看到于算法竞赛相关的内容,计算机各种文件在我看来十分复杂,认为构建他们并能达到目的是一件困难…...
跨平台办公自动化:OpenClaw+千问3.5-27B同步多端文件
跨平台办公自动化:OpenClaw千问3.5-27B同步多端文件 1. 为什么需要跨平台文件同步? 作为一个常年需要在Windows和Mac双系统切换的开发者,我经历过无数次这样的尴尬时刻:在Mac上修改的文档忘传到Windows,开会时找不到…...
终极指南:gin-vue-admin前端错误监控告警配置详解 - 邮件与钉钉实时通知方案
终极指南:gin-vue-admin前端错误监控告警配置详解 - 邮件与钉钉实时通知方案 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理&#…...
2025_NIPS_RT V-Bench: Benchmarking MLLM Continuous Perception, Understanding and Reasoning through R
文章主要内容与创新点总结 一、主要内容 本文针对现有基准测试无法充分评估多模态大语言模型(MLLMs)在动态真实环境中持续感知、理解和推理能力的问题,提出了实时视频分析基准测试集RT V-Bench。该基准包含552个多样化视频(总时长167.2小时)和4631个高质量问答对,涵盖智…...
