关于Java面试中的ArrayList底层结构、底层源码的高频热点面试题解析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 关于Java面试中的ArrayList底层结构、底层源码的高频热点面试题解析

一、ArrayList的底层结构

             ArrayList实现了 "List" 接口
             ArrayList:底层数据结构是"数组",特点是"查询快,增删慢"

二、ArrayList的底层源码分析

面试热点问题

(1)ArrayList底层是什么数据结构?
     ArrayList底层是一个Object数组: "transient Object[] elementData;"

(2)底层的数组的初始化长度是多少?
           使用"无参构造方法创建集合"时,数组的初始长度为 0

           使用"带参构造方法创建集合"时,数组长度由参数值指定
           
           
          public ArrayList() {
              this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;    //this.elementData={};
             }

         private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

(3)首次调用add方法添加元素的时候,数组的长度变为多少?
              如果"初始化的数组长度为0","首次添加元素"时,长度会扩容为"10"
               
              elementData=grow();   //grow();长度不够时会自动增长

(4)如果添加的元素超过数组长度,怎么办?
             数组会"自动扩容",长度在"原来的基础上增加一半"
                 
      int oldCapacity= elementData.length;
      int newCapacity= oldCapacity+(oldCapacity>>1)  >>1相当于除以2 (右移1位)
 
          
          
          
//注意:每一次发现现有的数组装不下,都会再次扩容一个1.5倍大小的新数组   (原来的基础上增加一半)
    
    新数组的长度 = 旧数组的长度+ 旧数组长度/2(直接舍弃小数部分)
    
        22     =   15      +       7
                             (15/2=7.5)  
    
//可以这样子记,新数组长度 = 旧数组长度*1.5 ,然后不要小数部分

作者:KJ.JK

本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。
文章对你有所帮助的话,欢迎给个赞或者 star,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习

目录
相关文章
|
30天前
|
Java Apache Maven
Java百项管理之新闻管理系统 熟悉java语法——大学生作业 有源码!!!可运行!!!
文章提供了使用Apache POI库在Java中创建和读取Excel文件的详细代码示例,包括写入数据到Excel和从Excel读取数据的方法。
54 6
Java百项管理之新闻管理系统 熟悉java语法——大学生作业 有源码!!!可运行!!!
|
1天前
|
存储 Java 索引
Java中的数据结构:ArrayList和LinkedList的比较
【10月更文挑战第28天】在Java编程世界中,数据结构是构建复杂程序的基石。本文将深入探讨两种常用的数据结构:ArrayList和LinkedList,通过直观的比喻和实例分析,揭示它们各自的优势与局限,帮助你在面对不同的编程挑战时做出明智的选择。
|
5天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
8天前
|
移动开发 前端开发 JavaScript
java家政系统成品源码的关键特点和技术应用
家政系统成品源码是已开发完成的家政服务管理软件,支持用户注册、登录、管理个人资料,家政人员信息管理,服务项目分类,订单与预约管理,支付集成,评价与反馈,地图定位等功能。适用于各种规模的家政服务公司,采用uniapp、SpringBoot、MySQL等技术栈,确保高效管理和优质用户体验。
|
30天前
|
JSON 前端开发 Java
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
文章介绍了Java后端如何使用Spring Boot框架响应不同格式的数据给前端,包括返回静态页面、数据、HTML代码片段、JSON对象、设置状态码和响应的Header。
111 1
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
|
11天前
|
安全 Java 程序员
Java集合之战:ArrayList vs LinkedList,谁才是你的最佳选择?
本文介绍了 Java 中常用的两个集合类 ArrayList 和 LinkedList,分析了它们的底层实现、特点及适用场景。ArrayList 基于数组,适合频繁查询;LinkedList 基于链表,适合频繁增删。文章还讨论了如何实现线程安全,推荐使用 CopyOnWriteArrayList 来提升性能。希望帮助读者选择合适的数据结构,写出更高效的代码。
38 3
|
30天前
|
存储 前端开发 Java
Java后端如何进行文件上传和下载 —— 本地版(文末配绝对能用的源码,超详细,超好用,一看就懂,博主在线解答) 文件如何预览和下载?(超简单教程)
本文详细介绍了在Java后端进行文件上传和下载的实现方法,包括文件上传保存到本地的完整流程、文件下载的代码实现,以及如何处理文件预览、下载大小限制和运行失败的问题,并提供了完整的代码示例。
229 1
|
30天前
|
算法 Java 测试技术
数据结构 —— Java自定义代码实现顺序表,包含测试用例以及ArrayList的使用以及相关算法题
文章详细介绍了如何用Java自定义实现一个顺序表类,包括插入、删除、获取数据元素、求数据个数等功能,并对顺序表进行了测试,最后还提及了Java中自带的顺序表实现类ArrayList。
17 0
|
22天前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
55 0
|
22天前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
47 0

推荐镜像

更多