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

php网站打开一片空白聊城推广网站

php网站打开一片空白,聊城推广网站,wifi扩展器做网站,好用的网站Java的ArrayList的自动扩容机制 ArrayList是 Java 中极为常用的动态数组实现类#xff0c;它依托数组存储数据#xff0c;能依据实际需求灵活变动容量#xff0c;高效管理元素集合。在深挖底层源码细节前#xff0c;先来了解创建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_ELEMENTDATA 和 DEFAULTCAPACITY_EMPTY_ELEMENTDATA两种不同场景下的空数组前者表示完全空的集合后者表示初始化容量为空但可扩展的集合。elementData存放实际数据的数组。size记录当前数组中的元素个数。 构造方法 ArrayList 提供了三种构造方法其中常用的是空参构造方法 public ArrayList() {this.elementData DEFAULTCAPACITY_EMPTY_ELEMENTDATA; }工作机制 空参构造方法并未立即分配内存而是初始化一个长度为 0 的空数组 DEFAULTCAPACITY_EMPTY_ELEMENTDATA。真正分配内存发生在第一次添加元素时数组容量会初始化为默认容量 10。 add 方法 当我们调用 add 方法添加元素时例如 ArrayListString 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 }关键逻辑 扩容检查如果当前数组已满size elementData.length调用 grow 方法进行扩容。新增元素将元素插入数组的 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倍的容量满足不了当前的需求时就会以实际的容量大小来进行扩容 逻辑详解 #mermaid-svg-jXu6VgVLQT1nGM2W {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-jXu6VgVLQT1nGM2W .error-icon{fill:#552222;}#mermaid-svg-jXu6VgVLQT1nGM2W .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-jXu6VgVLQT1nGM2W .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-jXu6VgVLQT1nGM2W .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-jXu6VgVLQT1nGM2W .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-jXu6VgVLQT1nGM2W .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-jXu6VgVLQT1nGM2W .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-jXu6VgVLQT1nGM2W .marker{fill:#333333;stroke:#333333;}#mermaid-svg-jXu6VgVLQT1nGM2W .marker.cross{stroke:#333333;}#mermaid-svg-jXu6VgVLQT1nGM2W svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-jXu6VgVLQT1nGM2W .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-jXu6VgVLQT1nGM2W .cluster-label text{fill:#333;}#mermaid-svg-jXu6VgVLQT1nGM2W .cluster-label span{color:#333;}#mermaid-svg-jXu6VgVLQT1nGM2W .label text,#mermaid-svg-jXu6VgVLQT1nGM2W span{fill:#333;color:#333;}#mermaid-svg-jXu6VgVLQT1nGM2W .node rect,#mermaid-svg-jXu6VgVLQT1nGM2W .node circle,#mermaid-svg-jXu6VgVLQT1nGM2W .node ellipse,#mermaid-svg-jXu6VgVLQT1nGM2W .node polygon,#mermaid-svg-jXu6VgVLQT1nGM2W .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-jXu6VgVLQT1nGM2W .node .label{text-align:center;}#mermaid-svg-jXu6VgVLQT1nGM2W .node.clickable{cursor:pointer;}#mermaid-svg-jXu6VgVLQT1nGM2W .arrowheadPath{fill:#333333;}#mermaid-svg-jXu6VgVLQT1nGM2W .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-jXu6VgVLQT1nGM2W .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-jXu6VgVLQT1nGM2W .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-jXu6VgVLQT1nGM2W .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-jXu6VgVLQT1nGM2W .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-jXu6VgVLQT1nGM2W .cluster text{fill:#333;}#mermaid-svg-jXu6VgVLQT1nGM2W .cluster span{color:#333;}#mermaid-svg-jXu6VgVLQT1nGM2W div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-jXu6VgVLQT1nGM2W :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是 是 否 否 添加元素 数组已满吗 调用 grow 方法 计算新容量 1.5倍旧容量 需要容量 使用 1.5倍旧容量 使用需要容量 复制数据到新数组 添加元素到数组 更新 size
http://www.dnsts.com.cn/news/165294.html

相关文章:

  • 麻涌东莞网站建设韩国风格网站php源码
  • 广州培训+网站开发工程建设网站策划方案
  • 天津去山西高铁做哪个网站html后缀的网站
  • 网站域名费怎么查询个人主页源码网页模板
  • 注册域名网站备案织梦宠物网站模板
  • 网站成功案例手机怎么管理wifi踢人
  • 沧州网站艰涩很wordpress代码id减1
  • 忻州专业网站建设代理服务器ip国外
  • 河北邯郸移动网站建设易企秀h5
  • 运城市做网站公司青岛网站建设哪个好
  • 做购物网站怎么赚钱广州微盟微商城
  • 网站 筛选功能好的seo平台
  • jsp系统网站建设带源代码旅游网站开发结束语
  • 最大网站建设公司排名wordpress中文分词
  • 国外网站设计理念企业微信软件
  • iis 网站目录权限设置杭州网站制作公司网站
  • 做个企业网站需要多少钱哪些网站可以注册邮箱
  • 做外贸什么网站比较好企业做网站哪家好
  • net的电商网站建设帝国cms网站地图xml
  • 绍兴专业做网站公司WordPress建站教程 网盘
  • 旅游网站效果图delphi 实现网站开发
  • 江阴网站制作设计搭建自己的个人网站
  • 株洲网站网络推广怎么做上海比较好的装修公司排名
  • 中小型电子商务网站怎么套网站
  • 哪些网站是做食品网站建设cms系统
  • 如何做测评视频网站wordpress网站加密码
  • 那些网站可以做0首付分期手机号诸暨做网站公司
  • 微信电脑版seo技术
  • 国外教程 网站wap手机网站开发
  • 站群seo技巧公司模板设计