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

news2024/12/23 11:24:40

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.coloradmin.cn/o/1831827.html

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

相关文章

【源码】Spring事务之事务失效及原理

Spring事务 1、【源码】SpringBoot事务注册原理 2、【源码】Spring Data JPA原理解析之事务注册原理 3、【源码】Spring Data JPA原理解析之事务执行原理 4、【源码】SpringBoot编程式事务使用及执行原理 5、【源码】Spring事务之传播特性的详解 6、【源码】Spring事务之…

语音识别相关文章整理目录

一、语音大模型架设与功能实现 使用sherpa-ncnn进行中文语音识别(ubuntu22)-CSDN博客文章浏览阅读953次,点赞30次,收藏26次。请注意,需要首先安装安装了所有必要的依赖项,包括 CMake、Git 和一个合适的 C/…

风控中的文本相似方法之余弦定理

一、余弦相似 一、 余弦相似概述 余弦相似性通过测量两个向量的夹角的余弦值来度量它们之间的相似性。0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。 从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。结…

vite|webpack环境变量-多模式配置

vite官方文档:环境变量和模式 | Vite (vitejs.net) (https://www.vitejs.net/guide/env-and-mode.html) 一、工程根目录创建env文件如下: 文件中参数书写格式: VITE_XXXXXX XXXXXX。必须使用等号。必须以VITE_开头…

《地下城与勇士》新手攻略,开荒必备!云手机多开教程!

《地下城与勇士》(DNF)是一款广受欢迎的多人在线动作角色扮演游戏。玩家将在游戏中扮演不同职业的角色,通过打怪、做任务、PK等方式不断提升自己,探索广阔的阿拉德大陆。游戏中设有丰富的副本、装备、技能系统,玩家可以…

程序员画图工具?那必然是你了!!【送源码】

作为一个程序员,画图是必不可少的技巧。当然此画图不是搞艺术,而是画各种架构图、流程图、泳道图以及各种示意图。 平时我不论是记笔记、写技术文章,还是工作中写文档,都需要配上各种各样的示意图。不管是帮助自己更好的掌握知识…

「6.18福利」精选大厂真题|笔试刷题陪伴|明天正式开屋啦 - 打卡赢价值288元丰厚奖励

🍰关于清隆学长 大家好,我是清隆,拥有ACM区域赛 银牌🥈,CCCC天梯赛 国一,PTA甲级 98 分。 致力于算法竞赛和算法教育已有 3 年,曾多次 AK 互联网大厂笔试,大厂实习经验丰富。 打卡…

示例:WPF中使用DecodePixelHeight和DecodePixelWidth优化Image性能

一、目的:在使用Image控件时,如果图片太大或者图片数量过多时加载出来的程序内存会非常的大,但一般图片多时我们只要预览缩略图就可以,查看时再显示原图,这个时候需要通过通过设置BitmapImage的DecodePixelHeight和Dec…

Postgresql配置SSL连接

1、系统需要有openssl、openssl-devel包 yum -y install openssl openssl-devel 2、查看当前数据库是否使用openssl编译 pg_config|grep CONFIGURE 如果没有重新编译 make clean make && make install 3、服务器端证书配置 服务器端需生成三个文件: root.crt(根证…

浏览器调试小技巧

一. 使用XSwitch工具代理本地服务地址 1. 谷歌提供了一个扩展程序: XSwitch 工具描述: 一个重定向URL并允许CORS使本地开发体验轻松愉快的工具。 ps: 这个工具只有谷歌有, 只能翻墙后下载 安装成功后 长这样: 2. 全局安装http-server , 用于在本地启动一个服务 npm i http-…

白帽子最喜欢用什么渗透测试工具?看看哪些是你用过的

一、白帽子最喜欢用什么安全工具? 2020 年的 HackerOne 黑客报告中,统计过白帽子们最喜欢用的软硬件工具。 从图中可以看到,89% 的白帽子都会使用 Burp Suite 这个 Web 应用安全测试工具,有 39% 会尝试自己写工具,第三名的 Fuzzers 是模糊测试工具。再后面主要是一些代理…

Dart 弱引用进阶

前言 村里的老人说:“真正的强者,都是扮猪吃老虎。” 日常开发中经常需要用到弱引用,Dart 语言里也有提供弱引用的接口 WeakReference,我们可以基于它开发更强大的复杂结构。 在前面的文章中,我们用到了一个以弱引用…

现代易货:创新交易模式引领物品交换新潮流

在繁华的现代经济浪潮中,物品交换的文化逐渐崭露头角,引领了一种新颖的交易潮流——现代易货交易模式。这种模式不仅是对古老“以物易物”交易的现代化诠释,更是对物品价值多元化和交换方式创新的深入探索。那么,现代易货交易究竟…

螺丝工厂vtk ThreadFactory(1)

螺丝工厂vtkThreadFactory (1) 缘起 几年前的探索在Python里应用Openscad实现3D建模之3D螺纹建模初探3 新的参考: generating nice threads in openscadvtkRotationalExtrusionFilter 辅助AI: coze 笔记📒: openscad 代码分析 // 半径缩放函数,用…

国货骄傲精亿内存条颠覆游戏战场,推出超强DDR5 7200玄武系列电竞内存

随着科技的迅猛发展,对高性能电脑的需求不断增长,特别是在电竞领域。认识到这一点,国货知名品牌精亿(JINGYI)推出了其全新一代DDR5 7200 RGB电竞内存条,并命名系列为象征中国上古四大神兽的玄武-系列。这款产品凭借其卓越性能和令人印象深刻的海力士A-DIE颗粒配置,正在迅速成为…

环信beta版鸿蒙IM SDK发布!深度适配HarmonyOS NEXT系统

环信beta版鸿蒙IM SDK已正式发布!欢迎有需求开发者体验集成! 版本亮点 提供原生鸿蒙 SDK,支持原生 ArkTS 语言,全面拥抱鸿蒙生态提供鸿蒙系统上单聊、群聊、会话等能力和服务覆盖消息管理、用户属性、群租管理、离线推送.多设备…

【C++】认识STL

【C】认识STL STL的概念STL的版本STL的六大组件STL的三个境界STL的缺陷 STL的概念 SLT(standard template libaray-标准模板库):是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个保罗数据结构与算法的软件框架。 STL的版本 原…

深入学习html的步骤

推荐的学习步骤&#xff1a; 1. 深入了解HTML基础标签 列表 HTML提供有序列表(<ol>)和无序列表(<ul>)。 <h2>无序列表</h2> <ul><li>项目一</li><li>项目二</li><li>项目三</li> </ul><h2>…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 火星字符串(100分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

函数的一点点习题

1、利用递归计算0-n的和 #include <stdio.h> #include <string.h> #include <stdlib.h> int rec(int n) {if(n0)return 0;elsereturn nrec(n-1); } int main(int argc, const char *argv[]) {int n0;printf("please enter n:");scanf("%d&quo…