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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

亚马逊云科技大语言模型加速OCR应用场景发展

目录 前言Amazon Bedrock关于OCR解决方案Amazon Bedrock进行OCR关键信息提取方案注册亚马逊账号API调用环境搭建 总结 前言 大语言模型是一种基于神经网络的自然语言处理技术&#xff0c;它能够学习和预测自然语言文本中的规律和模式&#xff0c;可以理解和生成自然语言的人工…

Day7 苍穹外卖项目 缓存菜品、SpringCache框架、缓存套餐、添加购物车、查看购物车、清空购物车

目录 1.缓存菜品 1.1 问题说明 1.2 实现思路 1.3 代码开发 1.3.1 加入缓存 1.3.2 清除缓存 1.3.2.1 新增菜品优化 1.3.2.2 菜品批量删除优化 1.3.2.3 修改菜品优化 1.3.2.4 菜品起售停售优化 1.4 功能测试 1.4.1 加入缓存 1.4.2 菜品修改 1.5 代码提交 2.缓存套餐 2.1 Spring C…

OpenGL环境配置

首先我们需要一个OpenGL上下文&#xff08;context&#xff09;和一个用于显示的窗口。这些操作在每个系统上都是不一样的&#xff0c;我们需要自己处理创建窗口&#xff0c;定义OpenGL上下文以及处理用户输入。 我们可以选择使用库来节省我们书写操作系统相关代码的时间&…

Sarcomere仿人灵巧手ARTUS,20个自由度拓宽机器人作业边界

Sarcomere Dynamics 是一家深度技术先驱&#xff0c;通过开发和商业化仿人机械来改变机器人行业。专注于为科研人员&#xff0c;系统集成商和制造商提供更实惠、更轻便且更灵活的末端执行器替代品。凭借创新的致动器技术&#xff0c;创造了一款紧凑、轻便且非常坚固的机械手Art…

qt QNetworkAccessManager详解

1、概述 QNetworkAccessManager是QtNetwork模块中的一个核心类&#xff0c;它允许应用程序发送网络请求并接收响应。该类是网络通信的基石&#xff0c;提供了一种方便的方式来处理常见的网络协议&#xff0c;如HTTP、HTTPS等。QNetworkAccessManager对象持有其发送的请求的通用…

聊点技术 | AI赋能:根因定位如何深入到SQL级别

作者信息 背 景 在当今数字化时代&#xff0c;企业对IT系统的依赖日益加深&#xff0c;系统故障的影响也愈发严重。因此&#xff0c;快速准确地定位故障根因成为了IT运维领域的重要课题。传统的故障排查方法往往只能触及表面&#xff0c;无法深入到最核心的SQL级别&#xff0c…

scss文件内引入其他scss文件报错

1、今天在编译一些老项目的时候&#xff0c;老是提示下面信息 2、而且有很多Sass import rules are deprecated and will be removed in Dart Sass 3.0.0.警告 3、用npm view sass versions看&#xff0c;其中sass的最新版本是1.82.0 4、经过测试"sass": "1.75…

楼房销售系统设计与实现

文末获取源码和万字论文&#xff0c;制作不易&#xff0c;感谢点赞支持。 毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;楼房销售系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xf…

EasyMedia播放rtsprtmp视频流(flvhls)

学习链接 MisterZhang/EasyMedia - gitee地址 EasyMedia转码rtsp视频流flv格式&#xff0c;hls格式&#xff0c;H5页面播放flv流视频 EasyMedia播放rtsp视频流&#xff08;vue2、vue3皆可用&#xff09; EasyMedia转码rtsp视频流flv格式&#xff0c;hls格式&#xff0c;H5页…

一文了解模式识别顶会ICPR 2024的研究热点与最新趋势

简介 对模式识别研究领域前沿方向的跟踪是提高科研能力和制定科研战略的关键。本文通过图文并茂的方式介绍了ICPR 2024的研究热点与最新趋势&#xff0c;帮助读者了解和跟踪模式识别的前沿研究方向。本推文的作者是黄星宇&#xff0c;审校为邱雪和许东舟。 一、会议介绍 ICPR…

完美解决Qt Qml窗口全屏软键盘遮挡不显示

1、前提 说明&#xff1a;我使用的是第三方软键盘 QVirtualKeyboard QVirtualKeyboard: Qt5虚拟键盘支持中英文,仿qt官方的virtualkeyboard模块,但使用QWidget实现。 - Gitee.com 由于参考了几篇文章尝试但没有效果&#xff0c;链接如下&#xff1a; 文章一&#xff1a;可能…

Bootstrap-HTML(三)Bootstrap5列表组全解析

Bootstrap-HTML&#xff08;三&#xff09;Bootstrap5列表组全解析 前言&#xff08;一&#xff09;HTML 列表基础回顾1.无序列表2.有序列表3.定义列表 二、无样式的有序列表和无序列表内联列表 三、Bootstrap5 列表组1.基础的列表组2.设置禁用和活动项3.链接项的列表组4.移除列…

rockit 学习、开发笔记(六)(VENC)

前言 上节我们讲到了VDEC解码模块&#xff0c;那当然少不了VENC编码模块了&#xff0c;一般有编解码的需求都是为了压缩视频的大小&#xff0c;方便减少传输所占用的带宽。 概述 VENC 模块&#xff0c;即视频编码模块。本模块支持多路实时编码&#xff0c;且每路编码独立&am…

使用Dapper创建一个简单的查询

1.先在NuGet上下载Dapper包 2.创建对应的model 代码如下&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace 数据显示 {public class User{public int UserId { get; set; }public…

wireshark网络安全流量分析基础

网络安全流量分析领域中&#xff0c;wireshark和csnas是取证、安全分析的好工具&#xff0c;包括很多研究安全规则、APT及木马流量特征的小伙伴&#xff0c;也会常用到两个工具。这两款流量嗅探、分析软件&#xff0c;今天先介绍wireshark作为安全分析工具的基本使用。 2|002.…

深度学习笔记25_LSTM实现糖尿病探索与预测

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 一、我的环境 1.语言环境&#xff1a;Python 3.9 2.编译器&#xff1a;Pycharm 3.深度学习环境&#xff1a;TensorFlow 2.10.0 二、GPU设置…

使用docker创建cloudstack虚拟主机

文章目录 概要 环境准备&#xff1a; 1.使用rockyLinux&#xff1a;8镜像 2.配置yum源 3.添加vim cloudstack.repo为以下内容 4.前期我们已经搭好了cloudstack平台&#xff0c;这里需要映射几个目录到容器里面&#xff0c; 5.创建Dockerfile 6.构建镜像 7.使用命令创建…

云计算对定制软件开发的影响

在当代数字世界中&#xff0c;云计算是改变许多行业&#xff08;包括定制软件开发&#xff09;的最伟大的革命性趋势之一。由于这些公司努力寻求更好、更多不同的方式来履行职责&#xff0c;因此云计算与传统的内部部署基础设施相比具有许多不可否认的优势。这种范式转变对定制…

Ubuntu Linux用户与组的管理

Ubuntu Linux操作系统- 第一弹 由猪猪侠开启Linux操作系统的学习 文章目录 前言Linux操作系统的发展Linux版本 Linux用户账户及其类型超级用户系统用户普通用户 Ubuntu超级用户权限与管理员Linux的超级用户权限解决方案Ubuntu管理员sudo命令su命令Ubuntu启用root登录 组账户及其…

案例研究|HYPER PaaS低代码工具携手DataEase嵌入式版,服务工业制造企业数智化转型

杭州星瀚智磐科技有限公司&#xff08;以下简称为“星瀚智磐”&#xff09;成立于2021年&#xff0c;是一家专注于低代码平台研发的高科技企业。星瀚智磐的核心产品HYPER PaaS低代码工具主要为制造业用户提供数字化解决方案。HYPER PaaS基于低代码平台简单的拖拉拽操作&#xf…