首页 > 编程语言 >JDK 1.8 ArrayList源码分析 关键代码

JDK 1.8 ArrayList源码分析 关键代码

时间:2023-01-18 15:45:17浏览次数:36  
标签:JDK int ArrayList elementData newCapacity minCapacity 长度 源码

/**
* 1. ArrayList AbstractList中实现了List接口 冗余,作者已经承认
* 2. RandomAccess 可以随机访问,标记接口
*
**/
public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable {
        //默认的长度大小
 private static final int DEFAULT_CAPACITY = 10;
 //数组的数据
 // transient 序列化会忽略,? 序列化的时候使用的element,writeObject的时候会重新复制。节省空间
 transient Object[] elementData;
    /**
     * 集合的大小
     */
    private int size;
     /**
     *  新的长度是旧的长度2倍
     *   * 扩容
     */
        private void grow(int minCapacity) {
        //旧的长度=元素的长度
        int oldCapacity = elementData.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
         //将旧数组的内容放到新数组中
        elementData = Arrays.copyOf(elementData, newCapacity);
    }

}

标签:JDK,int,ArrayList,elementData,newCapacity,minCapacity,长度,源码
From: https://www.cnblogs.com/youran-he/p/17059951.html

相关文章

  • JDK8的新特性总结
    文章目录1.接口默认方法实现2.新增Base64加解密API2.1.Base64编码简介2.2.JDK1.8之前Base64的API2.3.JDK1.8之后Base64的API3.时间日期处理类3.1.LocalDate常用......
  • 视频直播app源码,Android TextView省略号代替多出数据
    视频直播app源码,AndroidTextView省略号代替多出数据1、xml实现 android:maxLines=”1”android:ellipsize=”end”<TextView    android:id="@+id/name"  ......
  • jdk环境变量
    a.首先要打开系统环境变量配置的页面。具体操作是:桌面上找到“此电脑”,然后右键“属性”。b.c.在新建页面输入"变量名"位JAVA_HOME,输入“变量值”为你安装的JDK路径d.......
  • 【学习日志】Cglib动态代理和JDK动态代理的对比
     CglibJDKProxy实现方式生成被代理类的子类通过被代理类实现的接口+反射速度慢(曾经快于JDKProxy,但JDKProxy几次迭代后逐渐落后)快限制被代理类不......
  • 卸载安装jdk
    卸载jdk1.删除java安装目录2.删除java_home3.删除path下关于java的目录4.Java-version安装jdk1.百度搜索jdk8,找到下载地址2.同意协议3.下载电脑对应的版本4.双击......
  • 学习笔记——Servlet底层源码分析;Servlet接口;ServletConfig接口;
    2023-01-17 一、Servlet底层源码分析1、Servlet结构图   说明:HttpServlet继承了GenericServlet类,GenericServlet实现了“ServletConfig”和“Servlet”两个接口,......
  • Cesium源码之Label(二)
    我们查看Cesium源码时,有时会发现源码中有大量的includeStart开头的注释,如下图所示。这里面大多是调试信息,当使用gulp打包时,removePragmas参数设置为true,则会删除includeSt......
  • 提供源码:java获取节假日、工作日,存入数据库,查找指定日期前一天,后一天。
    提供源码:java获取节假日、工作日,存入数据库,查找指定日期前一天,后一天。码云地址:​​​https://gitee.com/guyuanman/holiday​​业务场景:好多公司的业务在处理的时候,会面......
  • Spring Cloud Alibaba——Nacos Config统一配置中心源码解析
    前言配置文件想必大家都很熟悉,无论什么架构都离不开配置,虽然springboot已经大大简化了配置,但服务环境也好几个,管理配置起来还是很麻烦,并且每次改完配置都需要重启服务,naco......
  • Django自定义认证系统原理及源码分析解读
    疑问Django在​​如何自定义用户登录认证系统的时候​​,大家都会里面立马说自定义一个或者多个backend,比如通过账号+密码、邮箱+密码,邮箱+验证码、手机号+短信验证码等等......