Java集合——Array、ArrayList、LinkedList

1. ArrayList和Array的区别

1. 大小和自动扩容

Array:创建时指定大小,大小固定。若数组被创建,其大小不能更改

ArrayList:动态数组实现,可以动态增长或缩小。在不断添加元素时,ArrayList会自动进行扩容

2. 支持泛型

Array不支持泛型,ArrayList可以指定存储的元素类型

3. 存储对象

Array可以存储基本类型数据,也可以存储对象

ArrayList之恶能存储对象,对于基本类型数据需要使用对应的包装类(Integer、Double等)

4. 集合功能

Array是一个简单的数据结构,不提供额外的方法进行元素的增删改查操作

ArrayList是集合框架的一部分,提供了丰富的增删改查方法等

2. ArrayList和LinkedList的区别及其底层实现

ArrayList

基于 动态数组,提供快速的随机访问和非常快的遍历操作

  1. 随机访问:时间复杂度为O(1)

  2. 增删元素:在末尾加元素很快,但在其他地方操作可能需要移动后续元素,时间复杂度O(n)

  3. 有扩容开销

使用场景:需要频繁访问元素,且增删操作主要在列表末尾进行,选择ArrayList

LinkedList

基于 双向链表,每个元素包含前后元素的引用

  1. 随机访问:效率较低,因为需要从头或从尾开始链接遍历,复杂度为O(n)

  2. 增删元素:在列表任意位置增删元素都很快,这只需要改变几个引用指针,是O(1)复杂度

特殊方法:提供了额外的方法,如addFirst(),addLast(),removeFirst(),removeLast()

使用场景:需要频繁增删元素但访问不是那么常见,选择LinkedList

3. ArrayList扩容机制

  1. ArrayList初始化容量默认为10

  2. 添加元素到ArrayList时,ArrayList会判断是否达到了最大大小Integer.MAX_VALUE,若达到则不再扩容,否则扩容

  3. 扩容计算:grow()

  4. 若新容量满足需求,调用Arrays.copyof方法,实现扩容。若不满足,则新容量大小为当前所需的容量+1

相关推荐
鹿鹿学长16 分钟前
2025年全国大学生数学建模竞赛(C题) 建模解析|婴儿染色体数学建模|小鹿学长带队指引全代码文章与思路
c语言·开发语言·数学建模
好家伙VCC19 分钟前
数学建模模型 全网最全 数学建模常见算法汇总 含代码分析讲解
大数据·嵌入式硬件·算法·数学建模
zhousenshan24 分钟前
Python爬虫常用框架
开发语言·爬虫·python
皮皮林5511 小时前
SpringBoot 全局/局部双模式 Gzip 压缩实战:14MB GeoJSON 秒变 3MB
java·spring boot
weixin_456904271 小时前
Spring Boot 用户管理系统
java·spring boot·后端
趁你还年轻_1 小时前
异步编程CompletionService
java
DKPT1 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
sibylyue1 小时前
Guava中常用的工具类
java·guava
奔跑吧邓邓子1 小时前
【Java实战㉞】从0到1:Spring Boot Web开发与接口设计实战
java·spring boot·实战·web开发·接口设计
专注API从业者2 小时前
Python/Java 代码示例:手把手教程调用 1688 API 获取商品详情实时数据
java·linux·数据库·python