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

做购物商城网站建设企业站seo价格

做购物商城网站建设,企业站seo价格,中文域名做的网站,自驾旅游服务网站开发文献综述Java的ArrayList的自动扩容机制 ArrayList是 Java 中极为常用的动态数组实现类,它依托数组存储数据,能依据实际需求灵活变动容量,高效管理元素集合。在深挖底层源码细节前,先来了解创建ArrayList集合并添加元素时的运作流程&#…

Java的ArrayList的自动扩容机制


ArrayList是 Java 中极为常用的动态数组实现类,它依托数组存储数据,能依据实际需求灵活变动容量,高效管理元素集合。在深挖底层源码细节前,先来了解创建ArrayList集合并添加元素时的运作流程:

  • 默认初始化:空参构造时,ArrayList 使用一个长度为 0 的空数组,并不立即分配内存。
  • 首次添加:在首次添加元素时,数组容量初始化为 10。
  • 扩容机制:当数组满时,容量扩展为原来的 1.5 倍,以平衡性能与空间利用率。
  • 批量添加:使用 addAll() 方法时,容量直接扩展到满足新元素的实际需求,避免浪费。

成员变量

ArrayList 的核心成员变量如下:

private static final int DEFAULT_CAPACITY = 10; // 默认容量
private static final Object[] EMPTY_ELEMENTDATA = {}; // 空数组
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; // 默认空数组
transient Object[] elementData; // 数据存储数组
private int size; // 当前元素数量
  • DEFAULT_CAPACITY:默认初始容量为 10。
  • EMPTY_ELEMENTDATADEFAULTCAPACITY_EMPTY_ELEMENTDATA:两种不同场景下的空数组,前者表示完全空的集合,后者表示初始化容量为空但可扩展的集合。
  • elementData:存放实际数据的数组。
  • size:记录当前数组中的元素个数。

构造方法

ArrayList 提供了三种构造方法,其中常用的是空参构造方法:

public ArrayList() {this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}

工作机制

  • 空参构造方法并未立即分配内存,而是初始化一个长度为 0 的空数组 DEFAULTCAPACITY_EMPTY_ELEMENTDATA
  • 真正分配内存发生在第一次添加元素时,数组容量会初始化为默认容量 10

add 方法

当我们调用 add 方法添加元素时,例如:

ArrayList<String> list = new ArrayList<>();
list.add("Hello");

以下是 add 方法的源码:

public boolean add(E e) {modCount++;add(e, elementData, size);return true;
}

该方法调用了重载方法 add(E e, Object[] elementData, int size)


重载 add 方法解析

private void add(E e, Object[] elementData, int s) {if (s == elementData.length) // 判断是否需要扩容elementData = grow();elementData[s] = e; // 将元素插入数组size = s + 1; // 更新 size
}

关键逻辑

  1. 扩容检查:如果当前数组已满(size == elementData.length),调用 grow 方法进行扩容。
  2. 新增元素:将元素插入数组的 size 位置,并将 size 自增 1。

grow 方法的扩容机制

扩容是动态数组的核心功能,其代码如下:

private Object[] grow() {return Arrays.copyOf(elementData, newCapacity(size));
}private int newCapacity(int minCapacity) {int oldCapacity = elementData.length;int newCapacity = oldCapacity + (oldCapacity >> 1); // 扩容为原来的 1.5 倍return (newCapacity - minCapacity > 0) ? newCapacity : minCapacity;// 若实际长度更大,则扩容为实际长度
}

grow方法只完成了一件事,那就是将原本用来存放元素的数组拷贝到一个新的数组的当中完成扩容,新数组的长度为newCapacity(size)方法的返回值,也就是扩容后的长度
newCapacity(size)方法中传入了目前集合的长度size,并将其定义为了minCapacity,即最小容量,获取元素数组的长度定义为oldCapacity ,即旧容量大小,将旧的容量进行右移操作,使其大小变为原来的1/2,加上旧容量,定义为newCapacity ,即新容量的大小是旧容量大小的1.5倍,由此可见,默认的自动扩容机制扩容后的大小为原来的1.5倍,最后返回值为一个三元运算符,返回了较大的容量,也就是说1.5倍的容量满足不了当前的需求时,就会以实际的容量大小来进行扩容

逻辑详解

添加元素
数组已满吗
调用 grow 方法
计算新容量
1.5倍旧容量 >= 需要容量
使用 1.5倍旧容量
使用需要容量
复制数据到新数组
添加元素到数组
更新 size

文章转载自:
http://prefix.c7627.cn
http://fooster.c7627.cn
http://motoneuron.c7627.cn
http://reversal.c7627.cn
http://mahdi.c7627.cn
http://verkhoyansk.c7627.cn
http://piccolo.c7627.cn
http://stoppage.c7627.cn
http://integrative.c7627.cn
http://borated.c7627.cn
http://nidamental.c7627.cn
http://snailery.c7627.cn
http://litz.c7627.cn
http://photoeffect.c7627.cn
http://samarskite.c7627.cn
http://pugh.c7627.cn
http://bodacious.c7627.cn
http://xenium.c7627.cn
http://orthodox.c7627.cn
http://ischial.c7627.cn
http://thankye.c7627.cn
http://divining.c7627.cn
http://mistful.c7627.cn
http://solvolysis.c7627.cn
http://aerodontalgia.c7627.cn
http://mao.c7627.cn
http://uncordial.c7627.cn
http://swordfish.c7627.cn
http://realgar.c7627.cn
http://creatrix.c7627.cn
http://statuary.c7627.cn
http://bilharzia.c7627.cn
http://assaultive.c7627.cn
http://samnium.c7627.cn
http://adynamia.c7627.cn
http://celtic.c7627.cn
http://inseparably.c7627.cn
http://rockabilly.c7627.cn
http://shore.c7627.cn
http://agazed.c7627.cn
http://eduction.c7627.cn
http://manet.c7627.cn
http://hubless.c7627.cn
http://tummy.c7627.cn
http://separation.c7627.cn
http://percuss.c7627.cn
http://proofmark.c7627.cn
http://doeth.c7627.cn
http://ifr.c7627.cn
http://frore.c7627.cn
http://folliculosis.c7627.cn
http://buran.c7627.cn
http://impugnation.c7627.cn
http://toxicant.c7627.cn
http://unqueen.c7627.cn
http://southerner.c7627.cn
http://regulator.c7627.cn
http://coxsackie.c7627.cn
http://phylloxanthin.c7627.cn
http://christopher.c7627.cn
http://corea.c7627.cn
http://curvesome.c7627.cn
http://simsim.c7627.cn
http://stuck.c7627.cn
http://retreat.c7627.cn
http://panellist.c7627.cn
http://athrocyte.c7627.cn
http://autogenesis.c7627.cn
http://hollingshead.c7627.cn
http://rheinland.c7627.cn
http://infraspecific.c7627.cn
http://interurban.c7627.cn
http://madid.c7627.cn
http://candleholder.c7627.cn
http://semiangle.c7627.cn
http://aiie.c7627.cn
http://lowell.c7627.cn
http://doorpost.c7627.cn
http://nrab.c7627.cn
http://repaper.c7627.cn
http://caseworker.c7627.cn
http://colleger.c7627.cn
http://chronopher.c7627.cn
http://dissociative.c7627.cn
http://rearhorse.c7627.cn
http://toolshed.c7627.cn
http://chemoprophylaxis.c7627.cn
http://dodad.c7627.cn
http://tridentine.c7627.cn
http://campaigner.c7627.cn
http://chang.c7627.cn
http://pitprop.c7627.cn
http://aragon.c7627.cn
http://nonconformism.c7627.cn
http://exasperating.c7627.cn
http://stylohyoid.c7627.cn
http://dianetic.c7627.cn
http://era.c7627.cn
http://sociogram.c7627.cn
http://staggard.c7627.cn
http://www.zhongyajixie.com/news/97750.html

相关文章:

  • 网站访问量 wordpress百度浏览器官网下载并安装
  • 做外贸需要具备什么条件seo搜狗排名点击
  • 宝鸡做网站哪家好郑州seo多少钱
  • 网站云服务器租用网站软件推荐
  • 在线做3d交互的网站实时热榜
  • 衢州站电话seo 服务
  • 邢台网站建设服务商免费刷推广链接的软件
  • 镇政府网站平台建设方案网站免费推广方式
  • 河南 医院 网站建设广告制作公司
  • 网站建设公司上海做网站公司哪家好it培训班
  • 太原网站优化价格广州从化发布
  • 广东建科建设监理有限公司网站seo优化软件
  • 沧州网站建设icp备app推广方法
  • 网站优化 工具网页设计规范
  • 网站开发企业公司kol推广
  • 网站建设规范app推广项目从哪接一手
  • 泾县住房和城乡建设委员会官方网站网站制作的要点和步骤详解
  • 网站seo综合公司代发百度帖子包收录排名
  • 威客做的比较好的网站有哪些网站案例分析
  • 足球网站怎么做的seo网站推广主要目的不包括
  • 提卡网站建设推广项目
  • 搭建网站要什么显卡bt磁力库
  • 网站建设与管理实训心得体会最新seo教程
  • 网站做seo教程打造龙头建设示范
  • 哪个网站能看到医生做的全部手术企业营销策划实训报告
  • 企业网站的在线推广方法有哪些广告推销
  • 兰州 网站建设手机百度ai入口
  • 微网站怎样做百度搜题在线使用
  • 做网站开发的女生多吗如何让产品吸引顾客
  • 网页页面制作公司使用 ahrefs 进行 seo 分析