首页 > 编程语言 >【java】【集合类】ArrayList扩容机制

【java】【集合类】ArrayList扩容机制

时间:2024-05-15 14:53:57浏览次数:13  
标签:扩容 无参 java 容量 ArrayList Collection add 集合

扩容规则

1. ArrayList() 无参构造扩容
2. ArrayList(int initialCapacity)扩容
3. public ArrayList(Collection<? extends E> c) 扩容
4. add(Object o)扩容
5. addAll(Collection c) 扩容

要注意的是,以下所有代码中用反射方式来更直观地反映 ArrayList 的扩容特征,但从 JDK 9 由于模块化的影响,对反射做了较多限制,需要在运行测试代码时添加 VM 参数 --add-opensjava.base/java.util=ALL-UNNAMED 方能运行通过

扩容规则
1. ArrayList() 无参构造扩容
       ArrayList() 无参构造会使用长度为零的数组

 

2. ArrayList(int initialCapacity)扩容

       ArrayList(int initialCapacity) 使用指定容量的数组初始化ArrayList()

3. public ArrayList(Collection<? extends E> c) 扩容
   public ArrayList(Collection<? extends E> c) 会使用 c 集合 的大小作为数组容量

4. add(Object o)扩容
  add(Object o) 首次扩容为 10,再次扩容为上次容量的 1.5 倍(使用移位相加的规则即(原容量 > > 1 ) + 原容量 (原容量>>1)+ 原容量(原容量>>1)+原容量 )

无参构造ArryList()

首次添加元素a

 

当数组容量满时添加b

 

5. addAll(Collection c) 扩容
addAll(Collection c) 没有元素时,扩容为 Math.max(10, 实际元素个数),有元素时为 Math.max(原容量 1.5 倍, 实际元素个数)

 

原文链接:https://blog.csdn.net/qq_52006948/article/details/127326420

标签:扩容,无参,java,容量,ArrayList,Collection,add,集合
From: https://www.cnblogs.com/zzsuje/p/18193846

相关文章

  • docker启动java容器报错unable to allocate file descriptor table - out of memory
    问题:启动java进程报错{"log":"libraryinitializationfailed-unabletoallocatefiledescriptortable-outofmemory","stream":"stderr","time":"2024-05-15T06:27:14.681052443Z"}原因:LimitNOFILE=infinity......
  • Java-线程-synchronized
    0.背景文章目录层级较多,参考我这篇文章来进行展开,方便阅读:博客园SimpleMemory主题如何浮动目录显示参考文章:synchronized底层monitor原理synchronized的底层是基于Java的监视器monitor的。在Java中,monitor(监视器)是用来实现线程同步的一种基本机制。它是一个控制结构,内置......
  • 【Elasticsearch】系统已经配置了JAVA_HOME,ElasticSearch源码还是操作gradle失败(JAVA_
    先看下报错内容吧,如下:FAILURE:Buildcompletedwith2failures.1:Taskfailedwithanexception.-----------*Where:Buildfile'/Users/liubolun/IdeaProjects/elasticsearch/benchmarks/build.gradle'line:20*Whatwentwrong:Aproblemoccurredevalu......
  • 【java】【集合类】HashMap之扩容原理
    一、什么是HashMap?HashMap数据结构为数组+链表(JDk1.7),JDK1.8中增加了红黑树,其中:链表的节点存储的是一个Entry对象,每个Entry对象存储四个属性(hash,key,value,next)二、为什么要使用HashMap?对于要求查询次数特别多,查询效率比较高同时插入和删除的次数比较少的情况下,通常会选择Arra......
  • Unrecognized option: --add-opens java.base/java.lang=ALL-UNNAMED
    由于Java中有关反射相关的功能自从JDK9就开始进行了限制,因此如果还想继续在JDK9以及更高的版本中使用反射相关的功能,需要添加JVM启动参数,--add-opensjava.base/java.lang=ALL-UNNAMED。由于现在的项目都是用Docker部署的,所以紧接着在DockerFile中添加了这个JVM启动参数,如下......
  • Java的基础语法
    Java的基础语法1、注释、标识符、关键字Java中的注释有三种,注释并不会被执行,是给人看的。单行注释//注释文字只能够注释一行。多行注释/*多行注释文字*/能够注释一段文字。文档注释/***abcd*aaaa*/和JavaDoc结合使用标识符Java所有的组成部分都需要名字......
  • CPLEX 初识 -- JAVA实现
    CPLEX初识--JAVA实现本文参考《运筹优化常用模型、算法及案例实战》,同时也是笔者用来记录自己所学知识,如有问题欢迎交流讨论~1环境配置&模型建立需要装配jar包及配置VMoptions,如下图所示:-Djava.library.path="/Applications/CPLEX_Studio2211/java"一般使用IloCple......
  • JAVA爬虫使用Selenium自动翻页
    关于Maven<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.15.3</version></dependency><dependency><groupId>org.seleniumhq.selenium</groupId>......
  • 面试题-JAVA基础
    JAVA有几种基本数据类型,各种类型占用字节大小?64位JVM中,int的长度是多数?Java的Integer缓存池大小是多少?Java中应该使用什么数据类型来描述价格?什么是装箱和拆箱?Java中的值传递和引用传递有什么区别?java8和java9的String类型的区别String,StringBuilder,StringBuffer区别......
  • 【JavaWeb】前后端分离SpringBoot项目快速排错指南
    1发起业务请求打开浏览器开发者工具,同时显示网络(Internet)和控制台(console)接着,清空控制台和网络的内容,如下图然后,点击你的业务按钮,发起请求。首先看控制台有没有报错信息,这是最直观的,看不懂英文就去翻译一下,百度一下如果控制台的信息并没有什么价值,或者指明是后端的问题,那么......