java创建一个可自由增长空数组_java集合框架(四)-ArrayList

2023-11-04

一、List接口的实现类ArrayList(数据结构:数组结构)

  • 数据结构:数组结构
  • 有序、允许空元素、允许重复元素
  • 查询快、增删慢
  • 不指定容量,则初始容量为10
  • 扩容机制:一般是旧容量的1.5倍
  • 不同步

java.util.ArrayList集合的数据结构是数组结构(API中可知道:ArrayList是List接口的大小可变的数组的实现),允许空元素。

元素查询快、增删慢,由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合。

每个ArrayList实例都有一个容量,容量是用于存储列表中的元素的数组的大小。它总是至少与列表大小一样大。 当元素添加到ArrayList时,其容量会自动增长

请注意,此实现不同步

ArrayList源码:底层实现是数组结构

以add方法为例,翻到源码的底层调用:

可以看到向集合中添加一个元素,实际上是创建了一个数组,将原数组的元素复制到新数组中。所以ArrayList对于元素的增删是很慢的,由于数组地址是连续的,查询是很快的。

二、JDK8源码

ArrayList JDK8下的源码 jdk1.8.0_121

在JDK8中,使用ArrayList 的无参构造方法,集合的初识容量仍然为10,但是和JDK7有很大不同

无参构造方法

在创建集合后,未使用集合的情况下底层并没有给集合初始容量

来看下add方法

调用ensureCapacityInternal方法,并将0+1作为参数传递,如果集合=={},说明是第一次向集合中添加元素,那么在DEFAULT_CAPACITY常量值为10和minCapacity值为1中取最大值10

调用ensureExplicitCapacity方法,并把10作为参数传递

满足>0的条件,调用方法grow,并把10作为参数传递

此时完成集合容量的设定,初识容量为10,数据结构为数组结构

执行完add方法的第一行后,集合的初识容量为10,再执行第二行,向集合中添加一个元素

三、扩容机制

ArrayList扩容机制

查看源码后我们了解了当使用无参构造方法创建ArrayList对象时,无论JDK7还是JDK8,其初识容量都是10。当我们不断的向集合中add元素时,添加的元素可能会超出集合的初识容量,这时就涉及到扩容。

我们写代码能不断的add,看似容量是无限的,实则代码底层是有扩容机制的

一般是,原容量的1.5倍。

所以,这就提醒我们在平时开发中,如果需要大容量的ArrayList集合,就会需要不断扩容,那么我们就不要使用无参构造方法来创建ArrayList对象,可以改为采用带参的构造方法创建ArrayList对象,参数是我们设定的集合容量

源码如下:


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java创建一个可自由增长空数组_java集合框架(四)-ArrayList 的相关文章

  • for循环步长_非常详细的基础讲解:Python for循环及基础用法(较长建议收藏)

    今天为大家带来的内容是 非常详细的基础讲解 Python for循环及基础用法 较长建议收藏 文章内容主要为大家介绍python for 循环 它常用于遍历字符串 列表 元组 字典 集合等序列类型 逐个获取序列中的各个元素 具有不错的参考与
  • Ubuntu安装cffi报错

    ERROR Command errored out with exit status 1 command home qkb miniconda3 envs DenseFusion bin python3 5 u c import sys s
  • Go语言实现Onvif客户端:7、获取摄像头快照

    Go语言实现Onvif客户端 7 获取摄像头快照 文章目录 Go语言实现Onvif客户端 7 获取摄像头快照 1 代码 2 结果 3 查看 1 代码 摄像头对该时刻可以进行快照抓拍 抓拍结果可以以url地址的形式提供 在浏览器上可以直接查看
  • python/函数

    Python 函数 函数是组织好的 可重复使用的 用来实现单一 或相关联功能的代码段 函数能提高应用的模块性 和代码的重复利用率 你已经知道Python提供了许多内建函数 比如print 但你也可以自己创建函数 这被叫做用户自定义函数 定义
  • 2021-05-26

    import org apache flink api common functions RichMapFunction import org apache flink statefun flink core StatefulFunctio
  • 到底什么是数据中台?

    最近可能大家听到 数据中台 这个词越来越频繁了 有时候我跟一些朋友聊起来 也是都在说这个 但是一直不知道这到底是个什么 最近就看到这篇文章 觉得说的还挺好的 分享给大家看看 希望大家看完能对数据中台有一些认识 转载来源 公众号 AI 前线
  • 【面向对象】多态类继承

    package TcmStudy day26 public class Test01 public static void main String args Cat c1 new Cat 子类对象初始化 实例化子类对象 创建一个父类类型对象
  • 7.2-C 标准库的实现

    复习 sh xv6 c 仅依赖系统调用的 最小 命令行 Shell 本次课回答的问题 Q 如何在系统调用之上构建程序能够普遍受惠的标准库 本次课主要内容 C 标准库设计与实现 基于 libc 的应用程序 一 熟悉又陌生的 libc 为什么需
  • Python基本操作

    前言 啦啦啦 现在开始 打算做一期Python基础教程 欢迎大家来看哦 导读 这期文章真的是Python基础中的基础 相信有一定编程基础的小伙伴们都一定能看懂的 本文共分为以下几个部分 数与运算符 基本输入输出 注释 模块基本操作 小彩蛋
  • Blob总结

    Blob Blob表示二进制类型的大对象 在数据库管理系统中 将二进制数据存储为一个单一个体的集合 Blob 对象表示一个不可变 原始数据的类文件对象 Blob 表示的不一定是JavaScript原生格式的数据 File 接口基于Blob
  • 磁盘性能测试工具-FIO的安装及使用

    文章目录 FIO介绍 FIO安装 在线安装 离线安装 磁盘测试 命令行方式 测试结果说明 命令参数说明 配置文件方式 dd命令介绍 使用方法 FIO介绍 FIO是一款测试IOPS的工具 用于对磁盘进行压力测试和验证 磁盘I O是检查磁盘性能
  • Arcpy(二)逐要素批量裁剪矢量数据集

    文章目录 一 前言 1 1 需求 1 2 实现思路 二 代码 2 1 导入库 2 2 设置文件夹路径并获取图幅编号 2 3 逐图幅批量裁剪 2 4 删除空要素类 三 小结 参考资料 一 前言 1 1 需求 现有一个较大区域的地形图数据集 矢
  • Android性能测试

    Android应用性能测试 Android用户也许会经常碰到以下的问题 1 应用后台开着 手机很快没电了 应用耗电大 2 首次 非首次启动应用 进入应用特别慢 应用启动慢 3 应用使用过程中 越来越卡 CPU能力不足 内存泄露 4 应用页面
  • JavaScript---DOM对象

    文章目录 JavaScript DOM对象 一 操作DOM对象 1 1 DOM对象的核心 1 2 获得DOM节点 1 3 更新DOM节点 1 4 删除DOM节点 1 5 插入DOM节点 1 6 创建一个新标签 实现插入 1 7 insert
  • Intro to Java Programming(Liang.10th)--02

    Chapter2 2 2 Writing a simple program ComputeArea concatenate strings 2 3 Reading input form Console How to specific imp
  • hive sql/ spark sql/sql 根据时间取最新的记录

    取用户购买的最新时间 套餐 价格等 由于用户购买的套餐类型多 导致求出来的是各个套餐的最新时间 但是我只要用户购买时间最新的一个套餐 直接select userid max time product from 表 group by user
  • C语言课程设计之设计菜单程序

    C语言课程设计之设计菜单程序 设计要求 1 菜单内容 程序运行后 给出三个菜单选项的内容和输入提示 1 FindNum 2 Dimand 3 Goodbye Input 1 3 2 设计要求 使用1 3数字来选择菜单项 其他输入则不起作用
  • 【剑指offer】数据结构——字符串

    目录 数据结构 字符串 直接解 剑指offer 05 替换空格 剑指offer 17 打印从1到最大的n位数 剑指offer 20 表示数值的字符串 剑指offer 37 序列化二叉树 剑指offer 50 第一个只出现一次的字符 剑指of
  • CUDA笔记

    1 cudaDeviceSynchronize 用于CPU和GPU同步 即cpu和GPU均运行至cudaDeviceSynchronize 后再继续 CPU多线程时 会阻止所有线程 2 syncthreads 用于核函数内线程块线程同步 即

随机推荐

  • Cygwin配置优化(乱码、颜色等问题)

    前面介绍了如何将Cygwin集成到Windows资源管理器的右键菜单中 点击在当前路径下打开窗口 本文介绍一些乱码问题与美化问题 1 乱码问题 在Cygwin中执行Windows原生程序 如ping ipconfig 时会出现中文乱码 显示
  • 遗传算法与TSP问题

    一 遗传算法 遗传算法 Genetic Algorithm 是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型 是一种通过模拟自然进化过程搜索最优解的方法 遗传算法是从代表问题可能潜在的解集的一个种群 population
  • 一致性Hash算法

    原文 https www cnblogs com lpfuture p 5796398 html 一致性Hash算法背景 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的 设计目标是为了解决因特网中的
  • matlab中dropoutLayer,[转]对 CNN 中 dropout layer 的理解

    原文网址 http blog csdn net u012702874 article details 45030991 dropout layer的目的是为了防止CNN 过拟合 那么为什么可以有效的防止过拟合呢 首先 想象我们现在只训练一个
  • 例说数据结构&STL(七)——priority_queue

    1 白话优先队列 priority queue 前面我们已经相继介绍了双向队列和FIFO特性的队列 这里我们还要接触另一个包含 队列 称呼的数据结构 优先队列 其实这三个数据结构名称看似很像 实则天差万别 通过下面的介绍你就会有很深的体会了
  • DDR一些引脚说明

    信号名 方向 功能描述 CK t CK c Input 差分时钟输入 所有的地址 控制信号都是通过CK t的上升沿与CK c的下降沿进行采样的 CKE Input 时钟使能 CKE为高电平时 启动内部时钟信号 设备输入缓冲以及输出驱动单元
  • 牛客在线编程-华为机试-中等

    牛客在线编程题目 华为机试 中等 题号 题目 知识点 难度 通过率 HJ16 购物单 动态规划 中等 21 21 HJ17 坐标移动 字符串 中等 24 79 HJ20 密码验证合格程序 数组 字符串 模拟 中等 28 91 HJ24 合唱
  • pycharm中使用GPU跑程序

    查看机器上GPU情况 命令 nvidia smi 功能 显示机器上gpu的情况 命令 nvidia smi l 功能 定时更新显示机器上gpu的情况 命令 watch n 3 nvidia smi 功能 设定刷新时间 秒 显示GPU使用情况
  • 面试回答 CopyOnWrite 的三重境界,1%的人能答到最后

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 目录 1 读多写少的场景下引发的问题 2 引入 CopyOnWrite 思想解决问题 3 CopyOnWrite思想在Kafka源码中的运用 今天聊一个非常硬核的技术
  • [动态系统的建模与分析]8_频率响应_详细数学推导 G(jw)_滤波器

    运放滤波器 3 反相同相比例放大电路 Multisim电路仿真 运放滤波器 2 运放反馈原理 运放滤波器 1 理想运放 虚短虚断 现代控制理论 11 现代控制理论串讲 完结 pdf获取 信号与系统在工程中 里面的一些工具应该是奠基石 电路
  • 浅析hadoop写入数据api

    对于一般文件 都有满足随机读写的api 而hadoop中的读api很简单用FSDataInputStream类就可以满足一般要求 而hadoop中的写操作却是和普通java操作不一样 hadoop对于写操作提供了一个类 FSDataOutp
  • 惠普打印机136w硒鼓芯片怎么清零_惠普136w打印机怎么清零

    大家好 我是时间财富网智能客服时间君 上述问题将由我为大家进行解答 惠普136w打印机清零的方法如下 1 关闭打印机电源 并把电源线从电源插座拨开 2 按紧打印机的电源键同时插上电源线 3 不松开电源键 按4下进纸键 电源灯显示 黄 橙 4
  • 学习记录-VS踩坑记录

    一 安装VS2015后 CMAKE执行错误 CMAKE C COMPILER NOTFOUND was not found CMAKE CXX COMPILER NOTFOUND was not found 环境 1 公司内网 无法上外网
  • 算法笔记-第四章-第六章

    4 1排序 1 选择排序 思路 总共需要进行N趟操作 每次从i n中选出最小的元素并与第I个元素交换 算法的时间复杂度为O n2 假设有数组A i 0 lt i lt n 1 如下 void selectSort for int i 0 i
  • 【设计模式】软件设计遵循——六大原则

    软件设计遵循 六大原则 1 开闭原则 定义 一个软件实体如类 模块和函数应该对扩展开放 对修改关闭 原则 用抽象构建框架 用实现扩展细节 优点 提高软件系统的可复用性和可维护性 2 里氏替换原则 定义 所有引用基类的地方必须能透明化地使用其
  • matlab函数零点求法,Matlab之函数零点

    Matlab之函数零点 Matlab中求函数零点的函数是fzero 一元函数 fsolve 二元函数 roots 一元多项式 等 fzero fzero可以求任何一元函数的零点 求函数 的零点 x 3 0 1 4 y x 2 sin x x
  • JS判断一个数组中是否有重复值

    首先 该笔记内容是将网上查阅的资料做了一个整合 便于自己快速查阅并解决问题 方法一 先利用ES6语法将数组去重 之后再与原数组比较长度 若长度小于原数组 则说明数组有重复值 Array from new Set arr length lt
  • jsp树形结构

    Dtree生成树形结构 很方便 很适用 下载dtree zip包请到下面地址去下载 http jinchun1223 javaeye com admin blogs 421817
  • [数值计算-16]:最小二乘法的求解1 - 一元二次方程解析法求解

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 119978799 目录 第1章
  • java创建一个可自由增长空数组_java集合框架(四)-ArrayList

    一 List接口的实现类ArrayList 数据结构 数组结构 数据结构 数组结构 有序 允许空元素 允许重复元素 查询快 增删慢 不指定容量 则初始容量为10 扩容机制 一般是旧容量的1 5倍 不同步 java util ArrayLis