List实现类——ArrayList、LinkedList及迭代器(并发修改异常错误)源码分析

1、ArrayList本质及源码分析

两种情况:加一个和很多个

底层原理:elementData是底层数组的名字

再次满了的话,在扩容1.5倍

如果利用addAll一次添加多个元素,按实际元素数进行扩容

源码分析:

1、空参构造,添加第个元素"aaa"时 : 第一次扩容

2、空参构造,添加第十一个元素"aaa"时(超出默认初始容量): 第二次扩容

2、LinkedList本质及源码分析

底层原理:双向链表,每个节点存储:上一个结点地址+数据+下一个结点地址

独有api:方便查询(用的少,一般用Collection里面的)

源码分析:

1、LinkedList的内部类——Node(结点的对象):三个成员变量:上一个结点地址+数据+下一个结点地址

2、LinkedList空参构造:空参时已经加载了三个初始化的成员变量

3、LinkedList的Add源码
第一次添加"aaa"时:

添加"bbb":

以此类推,Add "ccc"

wen

文字表达:

(1)、第一次add元素时,首先给尾结点last地址(null)并利用该结点当做是创建新结点的prev值,创建结束后,将新结点的地址值再次赋给last,更新尾结点的地址,以便后面添加新元素,起连接作用,这样以后创建的其他结点的prev值都是上次创建结点的地址值。

(2)、后面add结点时,last已经不为null,但此时l对应的还是上次创建的结点的地址值,所以令l的next值为新结点的地址值,这样保证以后创建的结点的上一结点的next值都是本次创建结点的地址值。

源代码:新结点的pre值为原结点的地址值(1),使得原结点的next值为新结点地址值(2)

3、迭代器源码分析:本质是ArrayList的一个内部类

内部类Itr,hashNext()方法

总体流程:

什么是并发修改异常?

  • 异常产生原因:并发修改异常指的是在并发环境下,当方法检测到对象的并发修改,但不允许这种修改时,抛出该异常。

modCount参数:集合变化的次数,add/remove后都会自增,创建迭代器时,将这个次数告诉迭代器(所以为什么迭代器中不允许有集合的操作原因如这条)

checkForComadification:判断集合是否变化,变化了返回并发修改异常错误

解决方法:

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

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

相关文章

STORM论文阅读笔记

这是篇NIPS2023的 world model 论文文章提出,WM的误差会在训练过程中积累从而影响policy的训练,向WM中加噪声可以改善这一点。其他的流程和IRIS差不多,差别在以下几点: image encoder,IRIS用的VQVAE, 本文用的是VAE&am…

看穿人性!现货白银交易的一些博弈心得

很多投资者认为现货白银交易最应该讲求的是交易技巧,但交易的技巧和套路是“死”的,行情走势却是“活”的,投资者需要在实践中不断地累积经验和总结心得,才能更加灵活地面对行情走势的变化,逐步达至盈利的理想彼岸。 无…

本地安装nightingale监控分析服务并发布公网详细流程

文章目录 前言1. Linux 部署Nightingale2. 本地访问测试3. Linux 安装cpolar4. 配置Nightingale公网访问地址5. 公网远程访问Nightingale管理界面6. 固定Nightingale公网地址 前言 本文主要介绍如何在本地Linux系统部署 Nightingale 夜莺监控并结合cpolar内网穿透工具实现远程…

Go基础编程 - 09 - 通道(channel)

通道(channel) 1. 声明2. channel的操作3. 无缓冲通道4. 有缓冲通道5. 如何优雅的从通道循环取值6. 单向通道7. 异常总结 上一篇:结构体 Go语言的并发模式:不要通过共享内存来通信,而应该通过通信来共享内存。 Go语言…

云原生周刊:Harbor v2.11 版本发布 | 2024.6.17

开源项目推荐 Descheduler Descheduler 是一个工具,可用于优化 Kubernetes 集群中 Pod 的部署位置。它可以找到可以移动的 Pod,并将其驱逐,让默认调度器将它们重新调度到更合适的节点上。 Prowler Prowler 是一款适用于 AWS、Azure、GCP …

js如何添加新元素到数组中

1.push方法 push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。这是向数组添加元素的最常用方法。 let arr [1, 2, 3]; arr.push(4); // 向数组末尾添加元素4 console.log(arr); // 输出: [1, 2, 3, 4] 2.unshift方法 unshift() 方法可向数组的…

oracle安装,导出、导入domp文件、解开oracle行级锁

下载地址: https://www.oracle.com/database/technologies/oracle19c-windows-downloads.html 然后解压,请记住你的解压地址,也就是软件安装地址, 后面还会有一个数据库存储位置,导出的domp文件就是在这里。 然后按照…

PyQt5和Eric7的安装使用 —— Python篇

需要安装Python的朋友请看另一篇文章: windows系统安装Python -----并安装使用Pycharm编辑器 一、安装PyQt5: 1、方法一:使用pip命令在线安装。 输入以下命令可以直接安装: pip install PyQt5 由于安装默认使用国外的镜像&a…

豆浆机水位传感器工作原理

豆浆机水位传感器的工作原理基于光电效应,利用近红外发光二极管和光敏接收器的组合实现液位的精确检测与控制。在豆浆机内部,传感器安装在水箱底部或需要检测液位的位置,起到监测和控制豆浆机水位的重要作用。 传感器包括一个近红外发光二极…

李良济联合盒马杭州店,带你沉浸式体验中医药文化,玩转夏季养生~

6月15-16日,李良济携手盒马联合打造的老字号养生路演活动,在新开业的杭州城西银泰城盒马店强势开启! 现场,既有李良济特色清凉养生茶饮,还有中医药文化体验活动,惊喜不断,养生不停~这个夏天在盒…

编写乘法器求解算法表达式

描述 编写一个4bit乘法器模块,并例化该乘法器求解c12*a5*b,其中输入信号a,b为4bit无符号数,c为输出。注意请不要直接使用*符号实现乘法功能。 模块的信号接口图如下: 要求使用Verilog HDL语言实现以上功能,并编写tes…

修改以太网卡mac地址

原生以太网卡与PCIe以太网卡 以Intel 原生以太网卡与PCIe以太网卡为例: Intel原生以太网卡和PCIe以太网卡在系统中实现网络连接时,涉及到与系统总线(如PCIe总线)的连接方式和性能差异。 Intel 原生以太网卡 定义:所…

富格林:掌握可信出金交易策略

富格林认为,黄金市场是起起落落,似乎机遇无处不在,但很少有人能真正抓住机遇。黄金可以做多也可以做空,做空主要是为了从黄金价格波动的价差中获利。只有采用正规可信的操作技巧,才能实现顺利获利出金,减少…

爬虫相关面试题(其三)

二十一 爬取数据后使用哪个数据库存储 一般爬虫使用的数据库,是根据项目来定的。 如需求方指定了使用什么样的数据库,如果没有指定,那么决定权就在爬虫程序眼手中,如果自选的话,mysql和MongoDB用的都是比较多的。 如…

二维平面装箱问题的常用工具

二维平面装箱问题(2D Bin Packing Problem, 2DBPP)是指在有限的二维平面上,如何将多个不规则或规则形状的物品有效地放置进尽可能少的容器(如矩形区域)中,同时满足每个容器的尺寸限制。由于这是一个NP难问题…

cloud_enum:一款针对不同平台云环境安全的OSINT工具

关于cloud_enum cloud_enum是一款功能强大的云环境安全OSINT工具,该工具支持AWS、Azure和Google Cloud三种不同的云环境,旨在帮助广大研究人员枚举目标云环境中的公共资源,并尝试寻找其中潜在的安全威胁。 功能介绍 当前版本的cloud_enum支…

第04章:IDEA的安装与使用

第04章:随堂复习与企业真题(IDEA安装与使用) 一、随堂复习 1. IDEA的认识 IDEA(集成功能强大、符合人体工程学(设置人性化))Eclipse 2. IDEA的下载、安装、卸载 卸载:使用控制面板进行卸载,…

列出docker常用的命令

一、基础命令 docker run 创建并启动一个容器 docker ps 列出当前运行的容器 docker ps -a 列出所有容器,包括未运行的 docker stop 停止一个运行中的容器 docker start 启动一个已停止的容器 docker restart 重启容器 docker rm 删除一个或多个容器 docker pull 从…

JDBC使用与操作

项目创建 新建maven项目,导入MySQL的驱动包.pom文件如下 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLo…

(分治算法3)leecode 53 最大子数组和(最大子段和)

题目描述 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组是数组中的一个连续部分。 分治解法 这个问题可以分成从左半边数组找最大子段和从右半部分找最大子段和…