java迭代器删除两个_两个迭代器的故事

java迭代器删除两个

当您查看最流行的Java面试问题时,您可能会遇到有关故障快速和故障安全迭代器的问题:

故障快速迭代器和故障安全迭代器之间有什么区别?

简化的答案是:

如果在迭代过程中修改了集合,则快速失败迭代器将引发ConcurrentModificationException ,但不会失败保护。

尽管这完全有道理,但不清楚访调员的故障安全含义。 对于迭代器,Java规范未定义此术语。 但是,有四种同时进行修改的策略。

并发修改

首先,让我们定义什么是并发修改。 例如,当我们有一个来自集合的活动迭代器并且对该集合进行了某些更改,但它们不是来自我们的迭代器时,会发生并发修改。 最明显的例子是当我们有多个线程时–一个线程正在迭代,第二个线程在同一集合中添加或删除元素。 但是,当我们在单线程环境中工作时,我们也可以获取ConcurrentModificationException

List<String> cities = new ArrayList<>();
cities.add(“Warsaw”);
cities.add(“Prague”);
cities.add(“Budapest”);Iterator<String> cityIterator = cities.iterator();
cityIterator.next();
cities.remove(1);
cityIterator.next(); // throws ConcurrentModificationException

不及格

上面的代码段是快速失败迭代器的示例。 如您所见,一旦我们尝试从迭代器中获取第二个元素,就会引发ConcurrentModificationException 。 迭代器如何知道创建集合后是否对其进行了修改? 您可能在集合中有一个时间戳,例如lastModified 。 创建迭代器时,需要复制该字段并将其存储在迭代器对象中。 然后,无论何时调用next()方法, lastModified需要将集合中的lastModified与迭代器中的副本进行比较。 例如,可以在ArrayList实现中找到非常相似的方法。 有一个modCount实例变量,其中包含对列表进行的修改次数:

final void checkForComodification() {if (modCount != expectedModCount)throw new ConcurrentModificationException();
}

值得一提的是,快速失败迭代器是在尽力而为的基础上工作的-无法保证如果存在并发修改,则会抛出ConcurrentModificationException ,因此我们不应该依赖该行为-而是应将其用于检测错误。 大多数非并行集合都提供快速失败的迭代器。

弱一致性

java.util.concurrent包中的大多数并发集合(例如ConcurrentHashMap和most Queues )都提供了弱一致性的迭代器。 文档中对它的含义进行了很好的解释:

  • 他们可能会与其他操作同时进行
  • 他们永远不会抛出ConcurrentModificationException
  • 它们被保证可以遍历在构造时已经存在的元素一次,并且可以(但不保证)反映出构造后的任何修改。

快照

在此策略中,从创建迭代器的那一刻起,迭代器就与集合的状态相关联-我们的集合快照。 对初始集合所做的任何更改都会创建基础数据结构的新版本。 当然,我们的快照是不变的,因此它不反映在创建迭代器之后对集合所做的任何更改。 这是一种古老的好的写时复制(COW)技术。 它完全解决了并发修改问题,因此不会引发ConcurrentModificationException 。 此外,迭代器不支持元素更改操作。 写入时复制集合通常太昂贵而无法使用,但是如果突变发生的次数显着减少,遍历遍历次数可能是个好主意。 示例为CopyOnWriteArrayListCopyOnWriteArraySet

未定义

未定义的行为可以在传统集合中找到,例如VectorHashtables 。 它们都具有具有快速失败行为的标准迭代器,但是它们还公开了Enumeration接口的实现,该接口在定义并发修改时不定义行为。 您可能会看到某些项目被重复或跳过,甚至飞来飞去的一些怪异异常。 最好不要玩这个野兽!

翻译自: https://www.javacodegeeks.com/2017/11/tale-two-iterators.html

java迭代器删除两个

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

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

相关文章

Linux 命令之 stat -- 显示文件的状态信息

文章目录一、命令介绍二、命令语法三、常用选项四、命令示例&#xff08;一&#xff09;显示文件的状态信息&#xff08;二&#xff09;以简洁方式输出文件的状态信息&#xff08;三&#xff09;显示文件所属的文件系统状态信息一、命令介绍 用于显示文件的状态信息。stat命令…

python tkinter滚动条不起作用_Tkinter滚动条不工作

我有一段运行在python3.4上的tkinter代码&#xff0c;它是一个放在画布上的带有垂直滚动条的大框架&#xff0c;但是滚动条是灰色的&#xff0c;似乎没有与框架的大小相关联。我使用的代码基本上是&#xff1a;class EntryWindow:def __init__(self, master):self.master mast…

大工17秋《计算机文化基础》在线测试1,大工17秋《组织行为学》在线测试1答案...

大工17秋《组织行为学》在线测试1一、单选题&#xff1a;1.根据气质的分类&#xff0c;较适合做推销工作的人员的气质类型是( )。 (满分:3)A.胆汁质B.多血质C.抑郁质D.黏液质正确答案:[hide]——B——[/hide]2.组织行为学在中观层面所要研究的主要内容是( )。 (满分:3)A.个体心…

java分页中显示更多_早期更多失败– Java 8

java分页中显示更多快速失败或早期失败是一种软件工程概念&#xff0c;旨在通过在不应该发生的事情发生时立即停止执行来防止复杂问题的发生。 在之前的博客文章和演示中&#xff0c;我将详细介绍这种方法的优点&#xff0c;在此博客文章中&#xff0c;我将详细介绍Java 8中该思…

计算机组装与维修单招,单招职二 计算机组装与维修试卷.doc

单招职二 计算机组装与维修试卷高二 计算机组装与维修试卷一、填空题(每空1分&#xff0c;共计30分)1.一个完整的计算机系统是由______________和______________两部分组成的。2.为了更好的为CPU散热&#xff0c;在安装风扇前&#xff0c;先在CPU芯片的顶部均匀地涂抹上一层___…

普通人学python好吗_有人问,普通人学python真的有意义吗?看看大家都是怎么说的吧...

普通人学python有意义吗&#xff1f;现在随着python越来越火&#xff0c;尤其是它成为了人工智能的第一编程语言&#xff0c;还被纳入了中小学的教育中。并且python的应用范围很广泛&#xff0c;可以解决很多专业或非专业的问题。但python真的适合普通人学习吗&#xff1f;我个…

Linux 如何安装程序的源代码软件包/源码程序包/源码包?

文章目录一、安装源码包的三个步骤&#xff08;一&#xff09;执行命令 configure&#xff0c;进行配置/检测&#xff08;二&#xff09;执行命令 make&#xff0c;编译源码&#xff08;三&#xff09;执行命令 make install&#xff0c;安装软件二、源码包安装示例&#xff08…

大文件拆分小文件求top_将文件拆分为流

大文件拆分小文件求top上周&#xff0c;我讨论了类Pattern新的&#xff08;since 1.8&#xff09;方法splitAsStream只能根据流的需要从字符序列中读取字符序列&#xff0c;并且不能继续进行模式匹配以创建所有可能的元素并返回它作为流。 这种行为是流的本质&#xff0c;它是支…

如何取消ie.html,IE浏览器安全警告怎么关闭

部分用户在使用IE浏览器打开某些页面的时候&#xff0c;可能会出现一个“安全警告”的对话框&#xff0c;虽然影响不大&#xff0c;但是每次出现都让人很烦闷&#xff0c;这个时候你就可以根据下面的操作去关闭这个功能。自从百度近日开启了HTTPS安全网页功能之后&#xff0c;每…

sql 计算两个小数乘积_数学篇|学会这些数学计算技巧,想不满分都难!

计算是小学数学的基础&#xff0c;四则运算和混合运算是计算要考察的重点。在这里我们总结了小学用到的所有计算定律和简便方法&#xff0c;包括运算定律、运算法则、运算顺序和速算技巧四大部分&#xff0c;帮助小学生牢固掌握数学知识点。先赞后看&#xff0c;收获满满&#…

Linux 如何关闭防火墙

一、使用 System V init 作为初始化系统的 Linux&#xff08;例如&#xff1a;CentOS 6.x&#xff09; 关闭防火墙的命令&#xff1a; chkconfig iptables off或 service iptables stop二、使用 systemd 作为初始化系统的 Linux&#xff08;例如&#xff1a;CentOS 7.x&#…

java学习2018年_Java 20年

java学习2018年二十年前&#xff0c;在苏黎世的一间公寓里发生了两件事。 我的女儿迈出了第一步&#xff0c;一位年轻的博士后研究员&#xff08;她的父亲&#xff09;迈出了使用Java的第一步。 很难完全了解当时的Java。 在这些时代&#xff0c;TCL盛行&#xff0c;Java时代与…

html 不透明阴影,CSS_css box-shadow阴影不透明的解决办法,如下面示例: 复制代码代码如 - phpStudy...

如下面示例&#xff1a;复制代码代码如下:phpStudy.shadow{width:120px;height:120px;border:1px solid #ccc;background:#fff;font-size:12px;padding:10px;-moz-box-shadow:0 4px 4px #999;-webkit-box-shadow:0 4px 4px #999;box-shadow:0 4px 4px #999;*filter: progid:DXI…

shell 脚本和 bash 脚本的关系

Shell 分类 常见的 Shell 有 sh、bash、csh、tcsh、ash 等。其中 bash shell 是 Linux 的默认 shell。即 bash 是 shell 的一种。 bash 脚本和 shell 脚本 bash 脚本仅是 shell 脚本的一种&#xff0c;csh 脚本也是 shell 脚本的一种。bash 脚本也可以称为 shell 脚本

mysql两个字段相减_MySQL 中NULL和空值的区别?

作为后台开发&#xff0c;在日常工作中如果要接触Mysql数据库&#xff0c;那么不可避免会遇到Mysql中的NULL和空值。那你知道它们有什么区别吗&#xff1f;学不动了&#xff0c;也不想知道它们有什么区别。大兄弟&#xff0c;不行啊&#xff0c;要面试&#xff01;前些天我的好…

做好计划事半功倍论文_Picocli 2.0:事半功倍

做好计划事半功倍论文介绍 Picocli是一个单文件命令行解析框架&#xff0c;它使您几乎不需要任何代码即可创建命令行应用程序。 使用Option或Parameters注释应用程序中的字段&#xff0c;picocli将分别使用命令行选项和位置参数填充这些字段。 例如&#xff1a; Command(name …

halcon python缺陷检测_Halcon学习笔记之缺陷检测(一)

*surface_scratch.hdev:extraction of surface scratches via local thresholding and morphological post-processing*dev_close_window()dev_update_window(‘off’)******step: acquire image //获取图片*****read_image(Image,’surface_scratch’) //读入图片名为’surfac…

Linux 脚本文件中开头的#!/bin/bash和#!/bin/sh是什么意思

解释 #!/bin/sh&#xff1a;表示此脚本使用 /bin/sh 来解释执行&#xff0c;#! 是特殊的表示符&#xff0c;其后面跟的是解释此脚本的 shell 的路径。 我们知道 shell 有很多种&#xff0c;例如&#xff0c;bash、csh、sh等&#xff0c;sh 是其中的一种&#xff0c;命令文件所…

srp unity_SRP是骗局

srp unity根据罗伯特马丁 &#xff08; Robert Martin&#xff09;的 《 清洁法 》&#xff08; Clean Code&#xff09; &#xff0c;“ 单一责任原则 ”意味着“一个阶级应该只有一个改变的理由”。 让我们尝试解密这个模糊的语句&#xff0c;看看它如何帮助我们设计更好的面…

html5app大赛,Anyoffice -HTML5大赛 悦心(基于H5开发安卓音乐app)-项目总结

悦心,一款音乐播放器应用。由“女立方”团队开发。眼下。较为流行的音乐播放器有QQ音乐、网易云音乐、多米音乐等。“悦心”音乐播放器的主要功能&#xff0c;提供音乐数据库&#xff0c;点击列表播放音乐&#xff0c;还可对歌曲进行收藏。加入专属音乐心情功能。1.歌曲播放过程…