java集合底层实现原理_java数据存入数组

java集合底层实现原理_java数据存入数组modCount:记录当前集合被修改的次数在所有的集合实现类中(Collection与Map中),都会有一个 modCount 的变量出现,它的作用就是记录当前集合被修改的次数。下面以ArrayList 类进行说明:添加方法:删除方法:可以看出,两个操作都会影响元素的个数。 当我们使用迭代器或 foreach 遍历时,如果你在 foreach 遍历时,自动调用迭代器的迭代方法,此时在遍历过程中调用了集合的add,remove方法时,modCount就会改变,而迭代器记录的modCount

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

modCount:记录当前集合被修改的次数
在所有的集合实现类中(Collection与Map中),都会有一个 modCount 的变量出现,它的作用就是记录当前集合被修改的次数。

下面以ArrayList 类进行说明:

添加方法:

在这里插入图片描述

在这里插入图片描述

删除方法:

在这里插入图片描述

可以看出,两个操作都会影响元素的个数。 

当我们使用迭代器或 foreach 遍历时,如果你在 foreach 遍历时,自动调用迭代器的迭代方法,此时在遍历过程中调用了集合的add,remove方法时,modCount就会改变,而迭代器记录的modCount是开始迭代之前的,如果两个不一致,就会报异常,说明有两个线路(线程)同时操作集合。这种操作有风险,为了保证结果的正确性, 避免这样的情况发生,一旦发现modCount与expectedModCount不一致,立即报错。

此类的 iterator 和 listIterator 方法返回的迭代器是快速失败的:在创建迭代器之后,除非通过迭代器自身的 remove 或 add 方法从结构上对列表进行修改, 否则在任何时间以任何方式对列表进行修改, 迭代器都会抛出 ConcurrentModificationException。 因此,面对并发的修改,迭代器很快就会完全失败, 而不是冒着在将来某个不确定时间发生任意不确定行为的风险。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168691.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql的mediumtext类型字段在java如何获取

    mysql的mediumtext类型字段在java如何获取数据库:PO:重点是autoResultMap=true和@TableField(typeHandler=FastjsonTypeHandler.class)@Data@EqualsAndHashCode(callSuper=false)@TableName(value=”xxx”,autoResultMap=true)@ApiModel(“一分钱充值用户配置表”)publicclassxxximplementsSerializable{@Tabl

    2022年5月18日
    56
  • python的几个有趣小程序「建议收藏」

    python的几个有趣小程序「建议收藏」最近整理一些python的小程序以及几个第三方库的简单使用,一方面用来熟悉手感,另一方面也用来休闲娱乐。文本进度条的编写:importtimescale=50print(“starting”.center(scale//2,”-“))start=time.perf_counter()foriinrange(scale+1): a=’*’*i b=’.’*(scale-i)…

    2022年6月22日
    144
  • DOS分区表(Boot Sector引导扇区)[通俗易懂]

    DOS分区表(Boot Sector引导扇区)[通俗易懂]>>DOS分区体系的硬盘也叫MBR硬盘,0号扇区是主引导记录MBR,DOS分区体系的硬盘用分区表记录每个分区的类型起始位置和分区的大小。其中,分区表就在0号扇区内,所以0号扇区如果损坏,那么这个硬盘就不能正确识别分区。>>DOS分区的使用范围:windows系统,Linux系统以及基于IA32平台FreeDBS和OpenDBS等操作系统都使用DOS分区体系。&g…

    2025年8月8日
    2
  • win32API中文参考手册[通俗易懂]

    win32API中文参考手册[通俗易懂]中文在线手册:http://www.yfvb.com/help/win32sdk/下面也是中文手册chm版,排版不是很好蓝奏云下载:https://wws.lanzous.com/iw8E3fhlz5icsdn下载:https://download.csdn.net/download/weixin_43833642/12434848[会自动长积分]如果是初学,上面的api勉强够用,建议参考着原版英文一起学习!最后如果帮到你可以点个赞!感谢!…

    2022年10月11日
    2
  • 微信小程序能跳转到外部链接吗(小程序跳转第三方网页)

    个人类型和海外类型的小程序不支持web-view标签也就是说个人申请的小程序,就别想跳转了!!!!1.开发的时候,我们难免碰到要跳转到其他网页中去那该怎么实现呢?2.例如我想点击一个按钮,跳转到百度(百度的网页还是在小程序中打开)3.wxml1.index.wxml(按钮页面)<viewclass=’wrapper’><b…

    2022年4月18日
    72
  • 正确处理Ordered Broadcasts「建议收藏」

    正确处理Ordered Broadcasts「建议收藏」
    原文:http://aoandroid.com/node/1414
     
     
    最近,Android官方开发员博客(DevelopersBlog)登载了Google巴西分布的一名工程师(
    BeloHorizonte )的文章,介绍了正确使用Broadcast的概念和实例分析。该文章在概念上纠正了很多开发人员对Broadcast处理中存在的严重问题,并指出这反映了开发文档存在缺陷,没有解释清楚。
    Broadcast是Android的一个很有用的概念

    2022年6月29日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号