java list 与set 集合的迭代器在进行元素操作时出现数据混乱问题及原因

为什么 List 和 Set 迭代器删除结果不同?

1. List 和 Set 的本质差异
  • List(如 ArrayList):
    • 有序集合,元素按插入顺序存储,允许重复元素。
    • 迭代器遍历时,元素按索引顺序返回。
    • 删除操作(通过 Iterator.remove())会移除当前元素,影响后续索引,但不改变其他元素的相对顺序。
  • Set(如 HashSet):
    • 无序集合,元素无固定顺序,不允许重复元素(基于 equals 和 hashCode)。
    • 迭代器遍历顺序不可预测(HashSet 依赖哈希表,顺序可能随实现或 JVM 变化)。
    • 删除操作会移除当前元素,但由于无序性,结果表现可能与预期不同。
2. 迭代器删除行为
  • Iterator.remove()
    • Java 的 Iterator 接口提供 remove() 方法,用于在迭代过程中安全删除元素,避免 ConcurrentModificationException。
    • 删除操作基于当前迭代位置,List 和 Set 的底层数据结构导致不同表现:
      • List:删除元素后,后续元素索引前移,迭代器继续按顺序遍历剩余元素。
      • Set:删除元素不影响其他元素的“位置”(因为无序),但遍历顺序可能因哈希表重排而变化。
3. 差异的原因
  • 顺序性
    • List 的迭代器按索引顺序遍历,删除后结果可预测(剩余元素按原顺序)。
    • Set 的迭代器遍历顺序不可预测(HashSet 依赖哈希桶),删除后剩余元素的顺序可能与初始不同。
  • 重复性
    • List 允许重复元素,删除特定元素只移除当前迭代的实例。
    • Set 不允许重复,删除元素后集合中该元素完全移除。
  • 底层实现
    • ArrayList 使用数组,删除操作会导致数组元素移位。
    • HashSet 使用哈希表,删除操作只移除哈希桶中的元素,不影响其他桶。

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

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

相关文章

大语言模型:人像摄影的“达芬奇转世”?——从算法解析到光影重塑的智能摄影革命

导言在摄影术诞生之初,达芬奇或许无法想象,他对于光影、比例和解剖的严谨研究,会在数百年后以另一种形式重生。今天,当摄影师面对复杂的光线环境或苦苦寻找最佳构图时,一位由代码构筑的“光影军师”正悄然降临——大语…

Java——MyBatis从入门到精通:一站式学习指南

MyBatis从入门到精通:一站式学习指南 作为一款优秀的半自动ORM框架,MyBatis以其灵活的SQL控制和简洁的配置方式,成为Java后端开发中持久层框架的首选。本文将从基础概念到高级特性,全面讲解MyBatis的使用方法,包含实用…

面试150 添加与搜索单词--数据结构设计

思路 通过哈希法去实现,这里主要描述search的思路:如果’.‘不在word中,我们只需要去查询word在不在set中。如果’.‘存在,我们对哈希中的字符串进行遍历w,如果当前字符串的长度不等于word跳过,对word进行遍历&#xf…

学习打卡网站(搭子版本)

概述 之前用了网上的一些学习打卡类app,基本都是收费的,而且有些自己想要的功能却没有,甚至还有广告,正好暑假是个需要容易懒惰的时间,所以干脆自己做了一个能和学习搭子一起记录计划的小网站。 昨天早上开始写&#x…

分享如何在Window系统的云服务器上部署网站及域名解析+SSL

最近看到阿里云的服务器有个199的活动,买了个2核4G带宽5M的服务器,用于小网站的运营也足够,于是就买一个,并且我还挑了个新加坡的站点,本想着运营独立站,用新加坡的站点外网访问会更友好一点。于是问题就来…

FastAdmin系统框架通用操作平滑迁移到新服务器的详细步骤-优雅草卓伊凡

FastAdmin系统框架通用操作平滑迁移到新服务器的详细步骤-优雅草卓伊凡我们蜻蜓hr系统采用的后端框架就是fastadmin,因此我们平稳迁移以此为例,为什么要迁移一份是因为有甲方需要。迁移FastAdmin系统到新服务器需要确保数据完整性和系统功能正常。以下是…

Request和Response相关介绍

Request 和 Response 是什么? Request(请求对象):用来接收浏览器发过来的数据。 Response(响应对象):用来把服务器处理后的结果返回给浏览器。 1. request 的作用(获取请求数据&am…

Springboot 实现热部署

spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署&#xff0c;提高开发者的开发效率&#xff0c;无需手动重启Spring Boot应用。引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>s…

虚拟机扩展磁盘容量后扩展分区大小

1. 首先检查磁盘剩余空间sudo fdisk -l /dev/sda2. 如果有未分配空间&#xff0c;直接扩展分区sudo fdisk /dev/sda在fdisk交互界面中&#xff0c;依次写入d # 删除分区 3 # 例如选择分区3&#xff08;/dev/sda3&#xff09; n # 新建分区 p # 主分区 3 # 分区号3 # 起始扇…

元宇宙与游戏:虚实交融的数字文明新纪元

引言&#xff1a;当游戏遇见元宇宙在纽约现代艺术博物馆&#xff08;MoMA&#xff09;的"虚拟世界"特展中&#xff0c;一幅数字艺术作品《元宇宙诞生》引发观展热潮。这幅由AI与人类艺术家共同创作的作品&#xff0c;描绘了游戏《堡垒之夜》的虚拟演唱会与现实世界交…

音视频学习(四十二):H264帧间压缩技术

必要性与优势 原始数字视频数据量庞大&#xff0c;未经压缩的视频难以有效传输和存储。例如&#xff0c;一个 1080p、30fps 的无压缩视频&#xff0c;每秒数据量可达数百兆比特。视频压缩的目标是在保证视觉质量的前提下&#xff0c;最大限度地减少数据冗余。视频数据中存在多种…

微服务雪崩防护最佳实践之sentinel

思考1、当服务访问量达到一定程度&#xff0c;流量扛不住的时候&#xff0c;该如何处理&#xff1f;2、服务之间相互依赖&#xff0c;当服务A出现响应时间过长&#xff0c;影响到服务B的响应&#xff0c;进而产生连锁反应&#xff0c;直至影响整个依赖链上的所有服务&#xff0…

阿里云监控及运维常见问题

云监控介绍&#xff1a;阿里云的云监控服务&#xff08;CloudMonitor&#xff09;是一款简单易用、功能强大的监控工具&#xff0c;主要用来帮助用户实时监控阿里 云上的各种资源&#xff08;比如服务器、数据库、网络等&#xff09;&#xff0c;并在出现问题时及时发出警报&am…

深入解析 vLLM 分布式推理与部署策略

在当今人工智能快速发展的时代&#xff0c;大型语言模型&#xff08;LLM&#xff09;的推理和部署面临着诸多挑战&#xff0c;尤其是当模型规模日益庞大时&#xff0c;如何高效地利用硬件资源成为关键问题。vLLM 作为一种强大的工具&#xff0c;为分布式推理和部署提供了多种策…

PostgreSQL 终端命令详解及实际应用案例

PostgreSQL 作为一款功能强大的开源关系型数据库&#xff0c;其终端命令是数据库管理员、开发人员日常操作的核心工具。这些命令覆盖数据库连接、对象管理、数据操作、备份恢复、权限控制等多个维度&#xff0c;掌握其实际应用场景能显著提升工作效率。本文结合不同行业的实操案…

步进电机基础

1、ENABLE‾\overline{ENABLE}ENABLE 的意思&#xff1a; ENABLE上面的横线表示这是一个低电平有效的信号&#xff1a;当ENABLE信号为低电平&#xff08;0V或逻辑0&#xff09;时&#xff0c;芯片被使能&#xff08;激活&#xff09;当ENABLE信号为高电平&#xff08;VDD或逻辑…

Redis进阶--缓存

目录 一、引言 二、介绍 1.为什么Mysql的速度慢呢&#xff1f; 2.缓存更新策略 1.定期生成 2.实时生成 3.redis的内存淘汰机制 4.注意事项 1.缓存预热 2.缓存穿透 3.缓存击穿 4.缓存雪崩 三、总结 一、引言 本篇文章将介绍Redis其中一个重要的作用&#xff0c;作为…

微软原版系统下载的几个好用网站

“不要因为走得太远&#xff0c;而忘记为什么出发。” 愿每一位Windows用户&#xff0c;都能在这份情怀中找到属于自己的小确幸&#xff01;满满的情怀&#xff01; 微软官方渠道 微软官网提供纯净的ISO镜像下载&#xff0c;适用于Windows 10/11等系统。访问Microsoft官网下…

kotlin Flow快速学习2025

其实&#xff0c;第一章节&#xff0c;只是让你了解下Flow的基本情况。我们开发中&#xff0c;基本很少使用这种模式。所以来讲&#xff0c;我们甚至可以直接使用StateFlow和SharedFlow才是正途。这是很多教程没有说明的点。所以第一章随便浏览下即可。日后再补充理解都是可以的…

【人工智能99问】什么是教师强制?(16/99)

文章目录什么是教师强制&#xff1f;教师强制&#xff08;Teacher Forcing&#xff09;的定义原比例&#xff08;Original Proportion&#xff09;教师强制的举例说明&#xff08;一&#xff09;教师强制的举例说明&#xff08;二&#xff09;优点和缺点解决曝光偏差的方法什么…