参考:

ArrayList扩容详解_java编程艺术的博客-CSDN博客_arraylist扩容

ArrayList底层是数组elementData,用于存放插入的数据。初始大小是0,当有数据插入时,默认大小DEFAULT_CAPACITY = 10。如果在创建ArrayList时指定了initialCapacity,则初始大小是ArrayList

oldCapacity + (oldCapacity >> 1)。

capacity:10,size:1
capacity:15,size:11
capacity:22,size:16
capacity:33,size:23
capacity:49,size:34
capacity:73,size:50
capacity:109,size:74

>>1 大概就是除于2,例如每位都左移,加上2的3次,变成2的2次,相当于每个位置都除以2。结果就是除以2。反之

面试之arrayList扩容机制的更多相关文章

  1. ArrayList扩容机制

    一.先从 ArrayList 的构造函数说起 ArrayList有三种方式来初始化,构造方法源码如下: 1 /** 2 * 默认初始容量大小 3 */ 4 private static final i ...

  2. ArrayList扩容机制以及底层实现

    简介 来源:博客园    作者:吾王彦 博客链接:https://www.cnblogs.com/qinjunlin/p/13724987.html ArrayList动态数组,是 java 中比较常 ...

  3. ArrayList扩容机制实探

    ArrayList初始化 问题:执行以下代码后,这个list的列表大小(size)和容量(capacity)分别是多大? List<String> list = new ArrayList ...

  4. 面试笔记--HashMap扩容机制

    转载请注明出处 http://www.cnblogs.com/yanzige/p/8392142.html 扩容必须满足两个条件: 1. 存放新值的时候当前已有元素的个数必须大于等于阈值 2. 存放新 ...

  5. ArrayList源码解析(二)自动扩容机制与add操作

    本篇主要分析ArrayList的自动扩容机制,add和remove的相关方法. 作为一个list,add和remove操作自然是必须的. 前面说过,ArrayList底层是使用Object数组实现的. ...

  6. ArrayList的扩容机制

    一.ArrayList的扩容机制 1.扩容的计算方式是向右位移,即:newSize = this.size + (this.size>>1).向右位移,只有在当前值为偶数时,才是除以2:奇 ...

  7. 浅谈JAVA中HashMap、ArrayList、StringBuilder等的扩容机制

    JAVA中的部分需要扩容的内容总结如下:第一部分: HashMap<String, String> hmap=new HashMap<>(); HashSet<Strin ...

  8. 【数组】- ArrayList自动扩容机制

    不同的JDK版本的扩容机制可能有差异 实验环境:JDK1.8 扩容机制: 当向ArrayList中添加元素的时候,ArrayList如果要满足新元素的存储超过ArrayList存储新元素前的存储能力, ...

  9. 关于ArrayList的扩容机制

    关于ArrayList的扩容机制 ArrayList作为List接口常用的一个实现类,其底层数据接口由数组实现,可以保证O(1) 复杂度的随机查找, 在增删效率上不如LinkedList,但是在查询效 ...

  10. Java ArrayList自动扩容机制

    动态扩容 1.add(E e)方法中 ①  ensureCapacityInternal(size+1),确保内部容量,size是添加前数组内元素的数量 ②  elementData[size++] ...

随机推荐

  1. LeetCode-382 链表随机结点

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/linked-list-random-node 题目描述 给你一个单链表,随机选择链表的一个节点, ...

  2. .NET6+WebApi+Vue 前后端分离后台管理系统(一)

    概述 项目是用的 NET6 webapi搭建一个前后端分离的后端管理框架,项目分为:表示层.业务层.数据访问层.数据存储层. Common:公共组件层,存放一些公共的方法.Model:实体Model数 ...

  3. Android studio学习笔记3

    Android studio学习笔记3 RelativeLayout常见属性 相对于父元素给控件布局 android:layout_centerHrizontal 若为ture水平居中 android ...

  4. react 04 生命周期

    生命周期的三个状态 mounting  : 组件插入到dom updating: 将数据更新到dom unmounting:将组件移除dom 生命周期的钩子函数 ComponentWillMount: ...

  5. python虚拟环境解决不能执行脚本的问题

    1 安装虚拟环境 pip install virtualenv 2 创建虚拟文件夹 mkdir .venvs 3.设置虚拟目录 virtualenv --system-site-packages .v ...

  6. ORACLE 遇到ORA-31693 ORA-31617 ORA-19505 ORA-27037

    今天发现生产的RAC环境expdp计划任务出现报错 之前一度认为是备份目录权限的问题 官方文档: MOS参考文档:DataPump Export (EXPDP) Fails With Errors O ...

  7. RxJava2.x的理解与总结

    RxJava2.x的理解与总结 RxJava是一个基于观察者设计模式将链式编程和异步结合在一起的开源库. 链式编程 通过查看GitHub开源项目的简介开源知道,RxJava有几个基类. 他们分别适用于 ...

  8. Google 官方 AppCrawles学习小结

    Google 官方 AppCrawles学习小结 AppCrawler可自动化测试应用程序,无需编写和维护任何代码. 可以自动发出(轻按.滑动)等操作执行app,当应用程序崩溃或达到指定的超时时间将终 ...

  9. linux rpm 命令

    # 产看软件包信息[root@devops201 k8s_install]# rpm -qi yum-utilsName : yum-utilsVersion : 1.1.31Release : 54 ...

  10. VUE如何创建一个项目

    1.安装 Vite npm install -g create-vite-app 2.利用 Vite 安装 Vue3.0 项目 create-vite-app projectName 3.安装依赖运行 ...