当前位置: 首页 > article >正文

ArrayList动态数组

概述

         ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。直接使用数组的缺点是数组一旦初始化就无法改变大小,而很多时候我们创建数组时并不知道将要往里面存多少数据,而动态数组就很好的解决了这个问题。

基本操作

        ArrayList除了可以自动扩展数组外,内部还提供来了很多好用的方法,使它比普通数组强大得多,这里随便列出一些,使用时可以查看文档了解所有的方法。

add()

将元素插入到数组最后一个元素后面或指定位置

addAll()

添加集合中的所有元素到数组中

contains()

判断数组是否包含某元素

get()

通过索引值获取元素

remove()

删除单个元素

subList()

截取部分元素

set()

替换指定索引的元素

sort()

对元素进行排序

扩容机制

        ArrayList的扩容机制是它被称为动态数组的原因,ArrayList默认初始容量是10,也可以在创建是指定初始容量的大小,当内部数组大小不满足元素新增需求时,就会触发扩容机制,先创建一个大小为原来1.5倍的数组,将原数组中的元素复制到新数组中,在用新数组代替原数组扩容就完成了。

应用

        作为数组ArrayList天生适合随机查找,不适合随机插入或删除,因为对ArrayList进行随机插入或删除需要对数组进行复制和移动,代价比较高。如果插入或删除只在ArrayList末尾元素进行,则不需要对数组进行复制和移动,这种情况也建议使用ArrayList,而不是LinkedList,LinkedList是基于链表的,只在随机插入或删除较多的情况下有优势。另外ArrayList是不同步的,多线程下使用需做好同步。

Vector向量

        Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免了多线程同时写而引起的不一致性问题,但实现线程同步需要很高的花费,因此,访问它比访问ArrayList更慢,Vector是一个遗留类,可能会被移除,已不建议使用,可以用CopyOnWriteArrayList代替。


http://www.kler.cn/news/306326.html

相关文章:

  • react18基础教程系列--安装环境及packagejson文件分析
  • llama网络结构及源码
  • 【MySQL学习】基础指令全解:构建你的数据库技能
  • OPENAIGC开发者大赛高校组金奖 | 基于混合大语言模型与多模态的全过程通用AI Agent
  • 【搜索算法】以扩召回为目标,item-tag不如query-tag能扩更多数量
  • 软件设计师——程序设计语言
  • 【短距离通信】【WiFi】精讲Android WiFi P2P架构及代码示例
  • SpringBoot教程(安装篇) | RabbitMQ的安装
  • MySQl篇(数据类型)(持续更新迭代)
  • 面试常见题之Spring Cloud
  • Redis常见应用场景
  • fsck 命令:修复文件系统错误
  • 读构建可扩展分布式系统:方法与实践05分布式缓存
  • 2-3.Android 存储之存储空间(私有空间、公共空间)
  • 【Android】Room—数据库的基本操作
  • 第108集《大佛顶首楞严经》
  • CAD_Electrical 2022使用记录
  • [Python学习日记-23] Python v2 和 v3 中的字符编码
  • python定时任务,定时爬取水质和天气
  • Navicat On-Prem Server 2.0 | MySQL与MariaDB基础管理功能正式上云
  • Windows电脑A远程连接电脑B
  • Java面试篇基础部分-Java反射机制是什么
  • 镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态
  • Lua闭包
  • 基于yolov5的混凝土缺陷检测系统python源码+onnx模型+评估指标曲线+精美GUI界面
  • 【Linux C | 终端设备】Linux下 tty、ttyS*、ttyAMA*、console 的区别,以及系统输出重定向(附带代码)
  • NPM私库搭建-verdaccio(Linux)
  • 【Kubernetes】常见面试题汇总(十七)
  • Django+Vue基于OpenCV的人脸识别系统的设计与实现
  • CleanMyMac X 4.15.6正式版 mac直装破解版