当前位置: 首页 > 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/a/306326.html

相关文章:

  • Linux 常用操作指令大揭秘(下)
  • C++中的栈(Stack)和堆(Heap)
  • 相机光学(四十二)——sony的HDR技术
  • Spring Boot 1.x 版本可以集成 Spring Cloud Sleuth
  • ubuntu ros 解决建完图后 保存的地图非常小的问题
  • 实现一个BLE HID鼠标
  • 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基础管理功能正式上云