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遍历集合的过程中,不要使用集合的方法去添加或者删除元素即可。

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

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

相关文章

C++学习日记---第16天

笔记复习 1.C对象模型 在C中&#xff0c;类内的成员变量和成员函数分开存储 我们知道&#xff0c;C中的成员变量和成员函数均可分为两种&#xff0c;一种是普通的&#xff0c;一种是静态的&#xff0c;对于静态成员变量和静态成员函数&#xff0c;我们知道他们不属于类的对象…

Java基础之网络编程:开启网络通信的神秘之门

一、网络编程概述 网络编程是通过计算机网络进行数据传输和通信的编程技术&#xff0c;在 Java 中&#xff0c;我们可以使用丰富的网络编程功能和 API 来实现不同计算机之间的数据交互。 Java 网络编程是指在 Java 语言中使用网络协议和 API 进行网络通信的编程技术。Java 网络…

Go 语言函数编程指南:定义、调用技巧与返回值机制

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Go语言探索之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Go语言简介 2、Go语言的特点 二、函数定义 1、Go语言函数定义 2、函…

在办公室环境中用HMD替代传统显示器的优势

VR头戴式显示器&#xff08;HMD&#xff09;是进入虚拟现实环境的一把钥匙&#xff0c;拥有HMD的您将能够在虚拟现实世界中尽情探索未知领域&#xff0c;正如如今的互联网一样&#xff0c;虚拟现实环境能够为您提供现实中无法实现的或不可能实现的事。随着技术的不断进步&#…

Springboot项目中子模块maven层级不一致的问题

&#xff08;一&#xff09;问题描述 campus-common、campus-pojo、campus-server都是campus-flower-system的子模块&#xff0c;但是只有campus-common在campus-flower-system下 &#xff08;二&#xff09;解决方法 打开父工程&#xff08;我这里是campus-flower-system&…

SpringBoot 架构下的在线家具商城:规划与实践之路

第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔记本的广泛运用&#xff0c;以及各种计算机硬件的完善和升…

【阅读笔记】Android广播的处理流程

关于Android的解析&#xff0c;有很多优质内容&#xff0c;看了后记录一下阅读笔记&#xff0c;也是一种有意义的事情&#xff0c; 今天就看看“那个写代码的”这位大佬关于广播的梳理&#xff0c; https://blog.csdn.net/a572423926/category_11509429.html https://blog.c…

【C++boost::asio网络编程】有关异步读写api的笔记

异步读写api 异步写操作async_write_someasync_send 异步读操作async_read_someasync_receive 定义一个Session类&#xff0c;主要是为了服务端专门为客户端服务创建的管理类 class Session { public:Session(std::shared_ptr<asio::ip::tcp::socket> socket);void Conn…

Proteus8.17下载安装教程

Proteus是一款嵌入式系统仿真开发软件&#xff0c;实现了从原理图设计、单片机编程、系统仿真到PCB设计&#xff0c;真正实现了从概念到产品的完整设计&#xff0c;其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等&#xff0c;能够帮助用…

frp 内网穿透

文章目录 前言使用自己的服务器搭建frp 这里服务器是linux centos 7 宝塔&#xff0c;client是 windows10 https://github.com/fatedier/frp/releases/tag/v0.53.2 版本下载分客户端与服务端 一、frp是什么&#xff1f;二、使用步骤1.部署服务器端2.客户端 前言 使用自己的服务…

大数据-239 离线数仓 - 广告业务 测试 FlumeAgent 加载ODS、DWD层

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; 目前开始更新 MyBatis&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff0…

基于 SpringBoot 开发在线家具商城:设计架构与实践流程

第3章 系统分析 用户的需求以及与本系统相似的在市场上存在的其它系统可以作为系统分析中参考的资料&#xff0c;分析人员可以根据这些信息确定出本系统具备的功能&#xff0c;分析出本系统具备的性能等内容。 3.1可行性分析 尽管系统是根据用户的要求进行制作&#xff0c;但是…

【Django-xadmin】

时间长不用,会忘的系列 1、Django-xadmin后台字段显示处理 主要是修改每个模块下adminx.py文件 代码解释&#xff1a;第1行控制表单字段显示第2行控制列表字段显示第3行控制搜索条件第4行控制过滤条件第5行支持单个或多个字段信息修改第6行列表分页&#xff0c;每页显示多少行…

【HM-React】02. React基础-下

React表单控制 受控绑定 概念&#xff1a;使用React组件的状态&#xff08;useState&#xff09;控制表单的状态 function App(){const [value, setValue] useState()return (<input type"text" value{value} onChange{e > setValue(e.target.value)}/>) …

朗迪锋亮相2024人因工程与智能系统交互国际会议

2024年11月28日至30日&#xff0c;2024人因工程与智能系统交互国际会议在深圳隆重举办。此次大会以推动我国人因工程学科发展为目标&#xff0c;致力于加强国际学术交流&#xff0c;深入探讨人工智能时代的智能系统交互&#xff0c;旨在培育新质生产力&#xff0c;助力经济社会…

基于Java Springboot房屋租赁App且微信小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 微信…

【小白学机器学习42】进行多次抽样,样本的分布参数和总体的分布参数的关系

目录 1 进行多次抽样&#xff0c;样本的分布参数和总体的分布参数的关系 2 样本容量越大&#xff0c;多次抽样的样本的分布参数和总体的分布参数的关系 2.1 如果进行多次抽样&#xff0c;样本的均值将趋向总体的均值 2.2 换句话说&#xff1a;样本的均值将趋向总体的均值就…

Spring Web开发(请求)获取JOSN对象| 获取数据(Header)

大家好&#xff0c;我叫小帅今天我们来继续Spring Boot的内容。 文章目录 1. 获取JSON对象2. 获取URL中参数PathVariable3.上传⽂件RequestPart3. 获取Cookie/Session3.1 获取和设置Cookie3.1.1传统获取Cookie3.1.2简洁获取Cookie 3. 2 获取和存储Session3.2.1获取Session&…

CSS学习记录03

CSS背景 CSS 背景属性用于定义元素的背景效果。 CSS background-color background-color属性指定元素的背景色。 页面的背景色设置如下&#xff1a; body {background-color: lightblue; } 通过CSS&#xff0c;颜色通常由以下方式指定&#xff1a; 有效的颜色名称-比如“…

Matlab mex- setup报错—错误使用 mex,未检测到支持的编译器...

错误日志&#xff1a; 在使用mex编译时报错提示&#xff1a;错误使用 mex&#xff0c;未检测到支持的编译器。您可以安装免费提供的 MinGW-w64 C/C 编译器&#xff1b;请参阅安装 MinGW-w64 编译器。有关更多选项&#xff0c;请访问https://www.mathworks.com/support/compile…