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

相关推荐
customer086 分钟前
【开源免费】基于SpringBoot+Vue.JS医疗报销系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
barcke15 分钟前
【深度解析】Java接入DeepSeek大模型:从零实现流式对话+多轮会话管理(完整项目实战) —— SpringBoot整合、API安全封装、性能优化全攻略
java·spring boot
愈谦卑20 分钟前
数据结构:排序
数据结构·算法·排序算法
zl97989927 分钟前
MybatisPlus-注解
java·spring·maven
好记性+烂笔头29 分钟前
hot100_108. 将有序数组转换为二叉搜索树
算法·leetcode·职场和发展
thinkMoreAndDoMore34 分钟前
深度学习(3)-TensorFlow入门(常数张量和变量)
开发语言·人工智能·python
杰九37 分钟前
【环境配置】maven,mysql,node.js,vue的快速配置与上手
java·vue.js·spring boot·mysql·node.js·maven
tt55555555555539 分钟前
每日一题——主持人调度(二)
c语言·数据结构·算法·leetcode·八股文
wapicn991 小时前
‌挖数据平台对接DeepSeek推出一键云端部署功能:API接口驱动金融、汽车等行业智能化升级
java·人工智能·python·金融·汽车·php
技术蔡蔡1 小时前
Android字节码处理-函数耗时统计揭秘
算法·面试