当前位置: 首页 > news >正文

java基础概念47-ArrayList、LinkList和迭代器

一、ArrayList集合

1-1、ArrayList的两种添加信息的方式

1-2、ArrayList集合底层逻辑

1、利用空参创建的集合,在底层创建一个默认长度为0的数组

2、添加第一个元素时,底层会创建一个新的长度为10的数组

3、存满时,会扩容1.5倍。

4、如果一次添加多个元素,1.5倍还放不下,则新创建数组的长度以实际为准。

二、LinkedList集合

 

2-1、LinkedList的特有API

LinkedList中的Node源码:

ListedList在任意位置插入元素:

import java.util.LinkedList;public class LinkedListInsertExample {public static void main(String[] args) {// 创建LinkedList并添加初始元素LinkedList<String> list = new LinkedList<>();list.add("A");list.add("B");list.add("C");// 打印插入前的链表:插入前的链表: [A, B, C]System.out.println("插入前的链表: " + list);// 在索引位置1插入元素"X"list.add(1, "X");// 打印插入后的链表:插入后链表: [A, X, B, C]System.out.println("插入后链表: " + list);}
}

2-2、ArrayList VS LinkedList

就整体使用频率而言,ArrayList通常比LinkedList更为常用

1、ArrayList的常用性及其原因

  1. 随机访问性能优越
    • ArrayList基于数组实现,支持O(1)时间复杂度的随机访问
    • 在需要频繁访问列表中元素(如通过索引获取元素)的场景中,ArrayList具有显著优势。
  2. 动态扩容方便
    • ArrayList提供了动态扩容的功能,能够根据需要自动调整大小。(1.5倍)
    • 这使得ArrayList在存储动态输入数据时更加灵活和方便。

进行排序合并等操作时,ArrayList都是首选的数据结构。

2、LinkedList的适用场景及其局限性

  1. 插入和删除性能优越
    • LinkedList基于链表实现,支持O(1)时间复杂度的在任意位置插入和删除元素(前提是已知要插入或删除元素的位置)。
    • 然而,在不知道位置的情况下,LinkedList的插入和删除操作需要遍历列表,时间复杂度为O(n)。
  2. 内存占用较大
    • 由于LinkedList中的每个元素都需要存储一个指向下一个元素的引用,因此其内存占用通常比ArrayList大。

 LinkedList更适用于需要频繁在任意位置插入和删除元素的场景。

三、迭代器(Iterator)

3-1、迭代器(Iterator)源码

3-2、迭代器(Iterator)的ConcurrentModificationException(并发修改异常)

Java集合框架中的大多数集合类(如ArrayListHashSet等)都有一个内部计数器modCount,用于记录集合被修改的次数。每当集合的结构发生变化(如添加、删除元素),modCount就会增加。

迭代器在创建时,会保存一个创建时的expectedModCount,这是迭代器期望的集合修改次数。在迭代过程中,每次调用next方法时,迭代器都会检查当前集合的modCount是否与expectedModCount相等。如果不相等,说明集合在迭代过程中被修改了(不是通过迭代器自身的remove方法),此时就会抛出ConcurrentModificationException

结论:在以后如何避免并发修改异常?

在使用迭代器或者是增强for遍历集合的过程中,不要使用集合的方法去添加或者删除元素即可。

相关文章:

java基础概念47-ArrayList、LinkList和迭代器

一、ArrayList集合 1-1、ArrayList的两种添加信息的方式 1-2、ArrayList集合底层逻辑 1、利用空参创建的集合&#xff0c;在底层创建一个默认长度为0的数组 2、添加第一个元素时&#xff0c;底层会创建一个新的长度为10的数组 3、存满时&#xff0c;会扩容1.5倍。 4、如果…...

Delphi 12.2.1 idhttpserver的使用方法

Delphi 12.2.1 idhttpserver的使用方法 1&#xff09;CommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);事件 该事件和IDTCPSERVER的EXECUTE()事件一样&#xff0c;都是“线程方法”&#xff0c;即事件是在子线程里…...

【golang】单元测试,以及出现undefined时的解决方案

单元测试 要对某一方法进行测试时&#xff0c;例如如下这一简单减法函数&#xff0c;选中函数名后右键->转到->测试 1&#xff09;Empty test file 就是一个空文件&#xff0c;我们可以自己写测试的逻辑 但是直接点绿色箭头运行会出问题&#xff1a; 找不到包。我们要在…...

jmeter 压测常用静默参数解释应用

简介&#xff1a; JMeter静默压测&#xff08;即无界面压测&#xff09;是一种常用的性能测试方法&#xff0c;用于模拟多个用户同时访问系统并测量系统的响应时间和吞吐量等关键性能指标。在JMeter静默压测中&#xff0c;常用的压测参数及其解释如下&#xff1a; 一、基本…...

【开源】A059-基于SpringBoot的社区养老服务系统的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看项目链接获取⬇️&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600个选题ex…...

《智能体雏形开发(高阶实操)》开发计划概述

智能体雏形开发计划 通过本计划,逐步完成一个可以真实运行的智能体雏形。 最终完成一个**“用户日志文件生成日报,日报再进一步汇总成周报”**的任务驱动型智能体雏形 第一阶段:基础准备与环境搭建 1. 学习基础知识 了解智能体的概念、类型和技术框架。学习大模型(如阿里…...

QT学习笔记-QStringList,QTimer

QStringList-存储和管理一系列的字符串 在Qt框架中&#xff0c;QStringList 是一个模板类 QList<QString> 的特化&#xff0c;专门用于处理 QString 对象&#xff08;即Qt中的字符串&#xff09;的列表。当你看到这样的声明&#xff1a; QStringList m_rec_topicList; …...

如何使用brew安装phpredis扩展?

如何使用brew安装phpredis扩展&#xff1f; phpredis扩展是一个用于PHP语言的Redis客户端扩展&#xff0c;它提供了一组PHP函数&#xff0c;用于与Redis服务器进行交互。 1、cd到php某一版本的bin下 /usr/local/opt/php8.1/bin 2、下载 phpredis git clone https://githu…...

游戏引擎学习第25天

Git: https://gitee.com/mrxiao_com/2d_game 今天的计划 总结和复述&#xff1a; 这段时间的工作已经接近尾声&#xff0c;虽然每次编程的时间只有一个小时&#xff0c;但每一天的进展都带来不少收获。尽管看起来似乎花费了很多时间&#xff0c;实际上这些日积月累的时间并未…...

多线程运行时,JVM(Java虚拟机)的内存模型

在多线程运行时&#xff0c;JVM&#xff08;Java虚拟机&#xff09;的内存模型主要涉及以下几个方面&#xff1a; 1. 主内存和工作内存 JVM内存模型定义了主内存和工作内存的概念。主内存是所有线程共享的内存区域&#xff0c;而工作内存是每个线程私有的内存区域。线程对变量…...

kernel crash数据解析

crash数据解析 crash解析工具下载和编译方法如下&#xff1a; git clone https://github.com/crash-utility/crash.git cd crash; make targetARM64 crash工具解析ramdump文件&#xff1a; 1. 将dump 出来的ramdump 文件拷贝到 Linux 系统 2. 找到当前Linux 内核对应的vm…...

CLIP模型也能处理点云信息

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…...

利用若依代码生成器实现课程管理模块开发

目录 前言1. 环境准备1.1 数据库表设计与导入 2. 使用若依代码生成器生成模块代码2.1 导入数据库表2.2 配置生成规则2.2.1 基本信息配置2.2.2 字段信息配置2.2.3 生成信息配置 3. 下载与集成生成代码3.1 解压与集成3.2 启动项目并验证 4. 优化与扩展4.1 前端优化4.2 后端扩展 结…...

用Python做数据分析环境搭建及工具使用(Jupyter)

目录 一、Anaconda下载、安装 二、Jupyter 打开 三、Jupyter 常用快捷键 3.1 创建控制台 3.2 命令行模式下的快捷键 3.3 运行模式下快捷键 3.4 代码模式和笔记模式 3.5 编写Python代码 一、Anaconda下载、安装 【最新最全】Anaconda安装python环境_anaconda配置python…...

SpringBoot实战(三十二)集成 ofdrw,实现 PDF 和 OFD 的转换、SM2 签署OFD

目录 一、OFD 简介1.1 什么是 OFD&#xff1f;1.2 什么是 版式文档&#xff1f;1.3 为什么要用 OFD 而不是PDF&#xff1f; 二、ofdrw 简介2.1 定义2.2 Maven 依赖2.3 ofdrw 的 13 个模块 三、PDF/文本/图片 转 OFD&#xff08;ofdrw-conterver&#xff09;3.1 介绍&#xff1a…...

linux环境人大金仓数据库修改密码

1.进入人大金仓安装目录 cd /home/opt/Kingbase/ES/V9/Server/bin2.连接数据库 ./ksql -U system -d mydb -h 127.0.0.1 -p 54321-u 用户名 -d 数据库名 -h ip地址 -p 端口号 3.修改密码 ALTER USER system WITH PASSWORD 密码;...

使用ESP32通过Arduino IDE点亮1.8寸TFT显示屏

开发板选择 本次使用开发板模块丝印为ESP32-WROOM-32E 开发板库选择 Arduino IDE上型号选择为ESP32-WROOM-DA Module 显示屏选择 使用显示屏为8针SPI接口显示屏 驱动IC为ST7735S 使用库 使用三个Arduino平台库 分别是 Adafruit_GFXAdafruit_ST7735SPI 代码详解 首…...

Spring Cloud Alibaba(六)

目录&#xff1a; 分布式链路追踪-SkyWalking为什么需要链路追踪什么是SkyWalkingSkyWalking核心概念什么是探针Java AgentJava探针日志监控实现之环境搭建Java探针日志监控实现之探针实现编写探针类TestAgent搭建 ElasticsearchSkyWalking服务环境搭建搭建微服务微服务接入Sky…...

【包教包会】CocosCreator3.x——重写Sprite,圆角、3D翻转、纹理循环、可合批调色板、不影响子节点的位移旋转缩放透明度

一、效果演示 重写Sprite组件&#xff0c;做了以下优化&#xff1a; 1、新增自变换&#xff0c;在不影响子节点的前提下位移、旋转、缩放、改变透明度 新增可合批调色板&#xff0c;支持色相、明暗调节 新增圆角矩形、3D透视旋转、纹理循环 所有功能均支持合批、原生平台&…...

jupyter-lab 环境构建

我平时用来调试各种代码的。 创建环境&#xff0c;安装库 conda create --name jupyterlab python3.12 -y conda activate jupyterlab conda install -c conda-forge jupyterlab nodejs之前用的是3.10的&#xff0c;但是最近安装的时候&#xff0c;发现3.10的python里面的jup…...

【C++】LeetCode:LCR 026. 重排链表

题干 LCR 026. 重排链表 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln-1 → Ln 请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → … 不能只是单纯的改变节点内部的值&#xff0c;而是需要实…...

【Linux】vim编辑器

vim是什么&#xff1f; vim就是命令行模式下的文本编辑器&#xff0c;相当于windows中的记事本&#xff0c;可以用来进行文本编辑。 vim有三种运行模式&#xff0c;分别可以执行不同的操作&#xff1a; 普通模式&#xff08;Normal Mode&#xff09;&#xff1a;用于浏览和编辑…...

delphi 12 idhttpsever(S)+idhttp(C) 实现简单的JSON API服务

这篇博客展示了如何使用Delphi创建一个简单的HTTP服务器&#xff0c;并处理GET和POST请求。服务器监听6600端口&#xff0c;响应JSON格式的数据。客户端通过IdHttp组件进行GET和POST请求&#xff0c;获取并显示服务器响应的内容。 http服务器测试代码 procedure TForm1.FormSh…...

JVM 主副内存 详解

在 JVM (Java Virtual Machine) 中&#xff0c;内存的设计主要分为主内存和工作内存&#xff08;又称为线程内存&#xff09;。这种设计是基于 Java 内存模型&#xff08;Java Memory Model, JMM&#xff09; 的规定&#xff0c;它确保了多线程环境下数据的一致性和线程间的通信…...

sscanf与sprintf函数

本期介绍&#x1f356; 主要介绍&#xff1a;sscanf()、sprintf()这对输入/输出函数&#xff0c;并详细讲解了这两个函数的应用场景。 概述&#x1f356; 在C语言的输出和输入库中&#xff0c;有三对及其相似的库函数&#xff1a;printf()、scanf()、fprintf()、fscanf()、spri…...

【k8s】创建基于sa的token的kubeconfig

需求 创建一个基于sa的token的kubeconfig文件&#xff0c;并用这个文件来访问集群。 具体创建sa 和sa的token请参考文章: 【k8s】给ServiceAccount 创建关联的 Secrets-CSDN博客 创建sa apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata:namespace: jtkjdevnam…...

Gentoo Linux部署LNMP

一、安装nginx 1.gentoo-chxf ~ # emerge -av nginx 提示配置文件需更新 2.gentoo-chxf ~ # etc-update 3.gentoo-chxf ~ # emerge -av nginx 4.查看并启动nginx gentoo-chxf ~ # systemctl status nginx gentoo-chxf ~ # systemctl start nginx gentoo-chxf ~ # syst…...

2411C++,CXImage简单使用

介绍 CxImage是一个可非常简单快速的加载,保存,显示和转换图像的C类. 文件格式和链接的C库 Cximage对象基本上是加了一些成员变量来保存有用信息的一个位图: class CxImage{...protected:void* pDib; //包含标题,调色板,像素BITMAPINFOHEADER head; //标准头文件CXIMAGEINFO…...

什么是 Kubernetes(K8s)?

什么是 Kubernetes&#xff08;K8s&#xff09;&#xff1f; Kubernetes&#xff08;简称 K8s&#xff09; 是一个用来管理容器的开源工具&#xff0c;它可以自动化部署、扩展和管理容器化应用。简单来说&#xff0c;K8s 就是一个“容器管家”&#xff0c;负责确保你的应用程序…...

深入解析:TypeScript 与 Vue 的完美结合

文章目录 前言一、准备工作二、基本用法三、进阶主题结语 前言 Vue.js 是一款流行的渐进式 JavaScript 框架&#xff0c;它以易于学习和灵活的特性而闻名。TypeScript 则是 JavaScript 的一个超集&#xff0c;它引入了静态类型检查等高级功能&#xff0c;有助于构建更大型且复…...