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

【Java集合】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代替。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java HashMap 总结
  • LeetCode-160.相交链表
  • C#学习笔记(三)Visual Studio安装与使用
  • 第十一章 【后端】商品分类管理微服务(11.1)——创建父工程
  • linux 操作系统下dd 命令介绍和使用案例
  • 【有啥问啥】对比学习(Contrastive Learning,CL)的原理与前沿应用详解
  • 【目标检测数据集】锯子数据集1107张VOC+YOLO格式
  • 【踩坑】装了显卡,如何让显示器从主板和显卡HDMI都输出
  • MATLAB入门教程
  • (k8s)Kubernetes 从0到1容器编排之旅
  • linux网络编程——UDP编程
  • 【深度学习】神经网络-怎么分清DNN、CNN、RNN?
  • 深度剖析去中心化存储:IPFS、Arweave 和 BNB Greenfield 的技术革新与生态系统演进
  • 30款免费好用的工具,打工人必备!
  • 浅谈vue2.0与vue3.0的区别(整理十六点)
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 345-反转字符串中的元音字母
  • C++11: atomic 头文件
  • canvas绘制圆角头像
  • CSS 三角实现
  •  D - 粉碎叛乱F - 其他起义
  • Docker: 容器互访的三种方式
  • dva中组件的懒加载
  • Java 内存分配及垃圾回收机制初探
  • Javascript弹出层-初探
  • Mysql5.6主从复制
  • Protobuf3语言指南
  • Unix命令
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 经典排序算法及其 Java 实现
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 如何实现 font-size 的响应式
  • 深度学习中的信息论知识详解
  • 我有几个粽子,和一个故事
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • 如何在招聘中考核.NET架构师
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • ​VRRP 虚拟路由冗余协议(华为)
  • #《AI中文版》V3 第 1 章 概述
  • #define,static,const,三种常量的区别
  • #define与typedef区别
  • #java学习笔记(面向对象)----(未完结)
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #NOIP 2014# day.2 T2 寻找道路
  • (C++17) std算法之执行策略 execution
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (论文阅读30/100)Convolutional Pose Machines
  • (南京观海微电子)——I3C协议介绍
  • (十六)Flask之蓝图
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】