Java集合框架源码分析:ArrayList

news2024/12/25 9:28:06

文章目录

  • 一、ArrayList特性
  • 二、ArrayList底层数据结构
  • 三、ArrayList继承关系
    • 1、Serializable标记性接口
    • 2、Cloneable标记性接口
    • 3、RandomAccess标记性接口
    • 4、AbstractList抽象接口
  • 四、ArrayList源码分析
    • 1、构造方法
    • 2、添加方法
    • 3、删除方法
    • 4、修改方法
    • 5、获取方法
    • 6、转换方法
    • 7、迭代器
    • 8、清空方法
    • 9、包含方法
  • 五、面试题
    • 1、ArrayList是如何扩容的?
    • 2、ArrayList频繁扩容导致添加性能急剧下降,如何处理?
    • 3、ArrayList插入或删除元素一定慢吗?
    • 4、ArrayList是线程安全的吗?
    • 5、如何复制某个ArrayList到另一个ArrayList中去?
    • 6、已知成员变量集合存储N多用户名称,在多线程的环境下,使用迭代器在读取集合数据的同时如何保证可以正常写入数据到集合?
    • 7、ArrayList和LinkList的区别

一、ArrayList特性

特性描述
是否允许为null允许
是否允许数据重复允许
是否有序有序
是否线程安全非线程安全

二、ArrayList底层数据结构

底层的存储结构为数组,并且可以动态的调整数组的大小。

数组的特性

  • 增删慢:每次删除元素,都需要更改数组长度、拷贝以及移动元素位置。
  • 查询快:由于数组在内存中是一块连续空间,因此可以根据地址 + 索引的方式快速获取对应位置上的元素。

三、ArrayList继承关系

在这里插入图片描述

1、Serializable标记性接口

类的序列化由实现java.io.Serializable接口的类启用。不实现此接口的类将不会使用任何状态序列化和反序列化。可序列化类的所有子类型都是可序列化的。序列化接口没有方法和字段,仅用于标识可串行化的语义。

  • 序列化:将对象的数据写入到文件(写对象)。
  • 反序列化:将文件中对象的数据读取出来(读对象)。
public interface Serializable {
}

2、Cloneable标记性接口

3、RandomAccess标记性接口

4、AbstractList抽象接口

四、ArrayList源码分析

1、构造方法

2、添加方法

3、删除方法

4、修改方法

5、获取方法

6、转换方法

7、迭代器

8、清空方法

9、包含方法

五、面试题

1、ArrayList是如何扩容的?

2、ArrayList频繁扩容导致添加性能急剧下降,如何处理?

3、ArrayList插入或删除元素一定慢吗?

4、ArrayList是线程安全的吗?

5、如何复制某个ArrayList到另一个ArrayList中去?

6、已知成员变量集合存储N多用户名称,在多线程的环境下,使用迭代器在读取集合数据的同时如何保证可以正常写入数据到集合?

7、ArrayList和LinkList的区别

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

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

相关文章

数据结构(DS)C语言版:学习笔记(4):线性表

参考教材:数据结构C语言版(严蔚敏,吴伟民编著) 工具:XMind、幕布、公式编译器 正在备考,结合自身空闲时间,不定时更新,会在里面加入一些真题帮助理解数据结构 目录 2.1线性…

青书学堂 看视频 耍课时

1. 获取课程节点id ( /nynzy/Student/Course/GetStudyRecordAndScore ) 接口地址 2. 把所有的nodeId 保存下来 保存到 old.txt 格式 课程id 与 nodeId 用 | 隔开 3. 然后创建 test.php 注意把 cookie 换成自己的 <?php$oldFilename ./old.txt; $newFilename ./new.…

idea插件开发之在项目右键添加菜单

写在前面 本文看下如何在右键列表中增加菜单。 正戏 首先创建一个Action&#xff0c;要显示的menu选择ProjectViewPopupMenu&#xff0c;如下&#xff1a; action public class CAction extends AnAction {Overridepublic void actionPerformed(AnActionEvent e) { // …

Excel 常用技巧(四)

Microsoft Excel 是微软为 Windows、macOS、Android 和 iOS 开发的电子表格软件&#xff0c;可以用来制作电子表格、完成许多复杂的数据运算&#xff0c;进行数据的分析和预测&#xff0c;并且具有强大的制作图表的功能。由于 Excel 具有十分友好的人机界面和强大的计算功能&am…

新项目Springboot报错: Whitelabel Error Page

问题&#xff1a; 新项目Springboot报错: Whitelabel Error Page 解析&#xff1a; 一般出现这个问题的原因就是目录结构不正确&#xff0c;导致主应用程序类&#xff08;Main application class&#xff09;扫描不到controller类。 默认情况下主应用程序类&#xff08;Main …

【Git】win本地 git bash:Connect reset by 20.205.243.166 port22报错问题解决

win10 git bash 控制台 reset 22端口拒绝连接问题&#xff1a; Connection reset by 20.205.243.166 port 221、22端口 无法连接 ssh -T gitgithub.com2、尝试用443端口 仍然无法连接 ssh -T -P 443 gitgithub.com3、重写 git clone 地址 url&#xff0c;全局添加 https 前缀…

从零到一,深入浅出大语言模型的奇妙世界

2022 年底&#xff0c;OpenAI 发布的 ChatGPT 模型在全球范围内引起了巨大轰动。本文详细的介绍了大语言模型的发展历程、构建过程和大语言模型如何使用等知识&#xff0c;帮助大家搞懂大语言模型。 一、大语言模型发展历程 大模型技术并不是一蹴而就的&#xff0c;大语言模型…

Neo4j Desktop界面认识以及数据库备份与还原

Neo4j Desktop界面认识以及数据库备份与还原 neo4j 版本信息&#xff1a;Neo4j Desktop Version 1.5.9&#xff1b;neo4j 5.12.0 系统信息&#xff1a;windows 11 Neo4j Desktop 界面 每个 Project 下可以有多个 DBMS&#xff0c;而每个 DBMS 中默认有 system 和 neo4j (def…

揭秘全自动高速开箱机:智能与精细化,打造高效生产

在现代化生产的浪潮中&#xff0c;全自动高速开箱机以其高效、智能的特点&#xff0c;成为众多行业提升生产效率的得力助手。与星派一起走进全自动高速开箱机的世界&#xff0c;探寻其高效背后的智能与精细。 全自动高速开箱机&#xff0c;是一种能够自动完成开箱操作的机械设备…

微信答题扫码答题自己能做吗?微信扫二维码答题快速制作的方法介绍!

在数字化时代&#xff0c;微信扫码答题已经成为一种流行的互动方式&#xff0c;它不仅便捷高效&#xff0c;而且能够极大地提升参与者的体验感。这种新型的答题方式&#xff0c;通过微信平台的广泛覆盖和用户友好的操作界面&#xff0c;为企业和组织提供了一个创新的知识传播和…

25. 一个双高斯照相物镜的设计

导论&#xff1a; 双高斯照相物镜的设计思想&#xff0c;当β-1时&#xff0c;由于其对称&#xff0c;彗差、畸变和倍率色差自动校正为0&#xff0c;利用中间两块厚透镜可以校正场曲&#xff0c;选取合适的光阑位置可以校正像散&#xff0c;在厚透镜中加胶合面使每个半部校正位…

uniapp中Error: project.configjson: libVersion 字段需为 string. string

错误如下 找到manifestjson文件到源码视图 添加这段代码"libVersion": "latest",即可

LabVIEW版本、硬件驱动和Windows版本之间兼容性

在LabVIEW应用开发和部署过程中&#xff0c;确保LabVIEW版本、硬件驱动和Windows版本之间的一致性和兼容性至关重要。这不仅影响程序的稳定性和性能&#xff0c;还关系到项目的成功实施。本文从多角度详细分析这些因素之间的兼容性问题&#xff0c;并提供相关建议。 兼容性考虑…

NTP8835数字功放-智能投影仪音频解决方案

数字功放是智能投影仪音频解决方案的一种重要技术&#xff1b;与传统的模拟功放相比&#xff0c;数字功放具有更高的效率和更低的失真&#xff1b;在智能投影仪中应用数字功放技术&#xff0c;可以提供更清晰、更真实的音频效果&#xff0c;为用户带来更好的听觉体验。 数字功放…

charles 改写接口数据 【Rewrite】

charles->Tools->Rewrite 勾选enable Rewrite 后点击上面的【Add】添加需要重新的请求数据 配置你的host数据 port和path可以直接跟图中一样 然后写要改写的body&#xff0c;也可以是url等数据&#xff0c;点击下面的【Add】 type处自己选择需要改写的类型 修改你需要…

云服务器部署Neo4j

文章目录 导读安装Neo4j先去官网看看下载安装包如果真的下载了rpm安装包 插件 导读 大模型&#xff0c;他终于来了。 不过呢&#xff0c;大模型相关&#xff0c;现在也就跟着热点去尝试一下multi-agent的RAG方向&#xff0c;看看能做到什么地步。总之我们先从安装neo4j开始。…

Javaweb07-JavaBean技术和Jsp开发模式

JavaBean技术和Jsp开发模式 一.JavaBean技术 1.JavaBean的基本概念 **JavaBean组件&#xff1a;**与html分离且使用Java代码封装类 **JavaBean分类&#xff1a;**可视化JavaBean&#xff1a;swing 非可视化JavaBean&#xff1a;用于封装实体和业务逻辑 JavaBean特点&#x…

Google Earth Engine(GEE)——导出影像video到自己的Google硬盘当中

函数: Export.video.toDrive(collection, description, folder, fileNamePrefix, framesPerSecond, dimensions, region, scale, crs, crsTransform, maxPixels, maxFrames) Creates a batch task to export an ImageCollection as a video to Drive. The collection must on…

有人说考个PMP证两个星期搞定?

PMP考试的时间并不需要太久&#xff0c;如果高效用心备考的话在对考试需要准备的时间上也只需要2-3个月的业余时间。而一次考试的时间也只需要半天&#xff0c;一门科目&#xff0c;就是《PMBOK》的知识。所以如果想学习项目管理考PMP认证的朋友&#xff0c;大可放心参加考试。…

线程池监控是怎么做的?

引言&#xff1a;在现代软件开发中&#xff0c;线程池是一种重要的并发控制机制&#xff0c;它能有效管理和复用线程资源&#xff0c;提升系统的性能和响应速度。然而&#xff0c;随着应用规模的扩大和复杂性的增加&#xff0c;对线程池进行有效监控显得尤为重要。线程池监控不…