参考:https://blog.csdn.net/fighterandknight/article/details/61240861

首先推荐一下这篇文章写的很不错,我只是看了一遍源码写下来了,想帮助记忆。

ArrayList()方法实现了List接口,它里面的是有序存放的,并且可以重复,并且可以是空值但是谁会去放空值呢,不知道为什么要这么设计,知道的告诉我一下,谢谢。

ArrayList()方法有三个构造方法

就看一下无参构造方法

这段代码是什么意思呢,JDK开发工程师给我们写出了注释,意思是给这个构造出来的空list容器默认初始大小是10;那么这个10是怎么来的呢?我想这句话可以解释清除吧    this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;   然而出乎意料

并没有告诉你这个容器的大小,只是定义了一个空数组;逗我呢,那10是从哪来的呢,不知道了吧 ,懵圈了吧,但是注释就是那么写的,我也不知到为啥是10。于是乎就有人说只是new出来一个List容器没有指定大小。

来看一下add()方法

在添加元素的时候,会执行一个方法字面意思就是确保容量足够,并且是size+1的基础上去判断。

它这边会先做一个判断 elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA,然后把DEFAULT_CAPACITY和 minCapacity中两个值中最大值交给了minCapacity。这个DEFAULT_CAPACITY值是10,这也许是容器默认值是10原因吧。

然后重点来了它是怎么扩容的呢,首先它会把要增加元素的长度交给oldCapacity,然后在扩容到它的1.5倍,这时候就要做判断了,如果说扩容后的容量还是不够,直接扩到它需要的大小,但是这时候又有一个问题,就是需要判断一下Integer.MAX_VALUE - 8如果还是放不下那个就直接扩到最大值Integer.MAX_VALUE。能不能放下就他了。没有比它在大的空间了,所有ArrayList的容量是有上限的。

ArrayList源码分析(JDK 1.8)相关推荐

  1. ArrayList源码分析与手写

    本节主要分析JDK提供的ArrayList的源码,以及与自己手写的ArrayList进行对比. ArrayList源码分析 构造方法 private static final int DEFAULT_ ...

  2. Java集合Collection源码系列-ArrayList源码分析

    Java集合系列-ArrayList源码分析 文章目录 Java集合系列-ArrayList源码分析 前言 一.为什么想去分析ArrayList源码? 二.源码分析 1.宏观上分析List 2.方法汇 ...

  3. ArrayList 源码分析

    公众号原文:ArrayList 源码分析 博客原文:ArrayList 源码分析 以下源码分析使用的 Java 版本为 1.8 1. 概览 ArrayList 是基于数组实现的,继承 Abstract ...

  4. 【Java源码分析】Java8的ArrayList源码分析

    Java8的ArrayList源码分析 源码分析 ArrayList类的定义 字段属性 构造函数 trimToSize()函数 Capacity容量相关的函数,比如扩容 List大小和是否为空 con ...

  5. Java中ArrayList源码分析

    一.简介 ArrayList是一个数组队列,相当于动态数组.每个ArrayList实例都有自己的容量,该容量至少和所存储数据的个数一样大小,在每次添加数据时,它会使用ensureCapacity()保 ...

  6. Java源码详解五:ArrayList源码分析--openjdk java 11源码

    文章目录 注释 类的继承与实现 构造函数 add操作 扩容函数 remove函数 subList函数 总结 本系列是Java详解,专栏地址:Java源码分析 ArrayList 官方文档:ArrayL ...

  7. LinkedList 源码分析(JDK 1.8)

    1.概述 LinkedList 是 Java 集合框架中一个重要的实现,其底层采用的双向链表结构.和 ArrayList 一样,LinkedList 也支持空值和重复值.由于 LinkedList 基 ...

  8. java list addall源码_Java集合:ArrayList源码分析

    其实我看到已有很多大佬写过此类文章,并且写的也比较清晰明了,那我为何要再写一遍呢?其实也是为了加深本身的印象,巩固本身的基础html (主要是不少文章没有写出来我想知道的东西!!!​!!!!)java ...

  9. 面试必会之ArrayList源码分析手写ArrayList

    作者:Java知音-微笑面对生活 简介 ArrayList是我们开发中非常常用的数据存储容器之一,其底层是数组实现的,我们可以在集合中存储任意类型的数据,ArrayList是线程不安全的,非常适合用于 ...

最新文章

  1. defparam的语法
  2. php数据库图片读取不出来,图片显示不出来,但是数据库里有显示
  3. 办公:Office快捷键之王,这个键应该没人不服!
  4. php使用邮箱发送验证码
  5. Solr 原理、API 使用
  6. Vue开发实例(04)之更换项目入口
  7. 太极发送卡片软件_xml卡片消息制作软件下载-qq xml卡片消息生成器最新版0.8.10.209 免费版-东坡下载...
  8. CentOS7详细安装教程--图文介绍超详细
  9. 前后端分离之Web前端架构设计
  10. 由LHS和RHS深入理解javascript引擎与作用域的交互
  11. 词霸天下---词根214【-mand- = -mend- 命 令】
  12. Daily English(每日一句)
  13. react开发插件-ES7 React/Redux/GraphQL/React-Native snippets
  14. ros python 控制手柄数据发布频率
  15. 无人机在精准农业中的研究综述
  16. Python 商品价格区间设置与排序
  17. 正则表达式 同时验证手机号码和固定电话号码
  18. 电子日志 android、,eDiary电子日记本 3.0 beta2:新增天气对话框
  19. 基于802.1x协议的接入认证简单实现
  20. 干货分享,使用python爬虫构建免费代理IP池

热门文章

  1. html文本框样式大全,HTML文本框样式大全!(很实用,转载!)
  2. Springboot旅游网站管理系统毕业设计、Springboot旅游线路和景点网站设计与实现 毕设作品参考
  3. implicit(隐藏) intent 和 explicit(明确) intent
  4. linux编写E325:ATTENTION错误
  5. 学医考计算机三级,千万不要学医!一个过来人的经验之谈!
  6. 高通三屏显示-副屏display[1] dpi密度修改
  7. 一个人最重要的投资就是投资自己
  8. 边缘计算的解决方案大集合
  9. goaheadlinux移植_goAhead2.5嵌入式web服务器移植
  10. 【pyecharts50例】带阴影效果折线图~