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

简介: 关于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,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习

目录
相关文章
|
18小时前
|
前端开发 小程序 Java
深入解析Java Servlet与JSP:构建高效服务器端应用
【6月更文挑战第23天】Java Servlet和JSP是Web开发的关键技术,用于构建高效服务器端应用。Servlet处理HTTP请求,执行业务逻辑,而JSP专注于动态HTML生成。两者结合,借助MVC架构,实现逻辑与视图分离,提高代码可读性和性能。尽管有新框架出现,Servlet和JSP仍是许多项目的基础。
|
18小时前
|
缓存 Java 编译器
Java内存模型深度解析
【6月更文挑战第22天】在探索Java内存模型的迷宫中,我们不仅需要理解其结构,还要揭开它运作的神秘面纱。本文将深入挖掘Java内存模型的核心概念,从硬件架构出发,到Java内存模型的设计哲学,再到并发编程中的实际应用,我们将一步步解码Java内存模型的奥秘。
|
1天前
|
Java Android开发 Kotlin
Android面试题:App性能优化之Java和Kotlin常见的数据结构
Java数据结构摘要:ArrayList基于数组,适合查找和修改;LinkedList适合插入删除;HashMap1.8后用数组+链表/红黑树,初始化时预估容量可避免扩容。SparseArray优化查找,ArrayMap减少冲突。 Kotlin优化摘要:Kotlin的List用`listOf/mutableListOf`,Map用`mapOf/mutableMapOf`,支持操作符重载和扩展函数。序列提供懒加载,解构用于遍历Map,扩展函数默认参数增强灵活性。
9 0
|
2天前
|
缓存 安全 Java
Java线程面试题含答案
Java线程面试题含答案
|
2天前
|
SQL Java
java面试题笔试常见选择题大全含答案
java面试题笔试常见选择题大全含答案
|
2天前
|
SQL JavaScript Java
java程序员面试题大全含答案(2018--2019)
java程序员面试题大全含答案(2018--2019)
|
2天前
|
设计模式 开发框架 Java
java设计模式面试题大全含答案
java设计模式面试题大全含答案
|
2天前
|
设计模式 SQL JavaScript
java面试宝典全套含答案
java面试宝典全套含答案
|
2天前
|
存储 设计模式 Java
java实习生面试题_java基础面试_java面试题2018及答案_java面试题库
java实习生面试题_java基础面试_java面试题2018及答案_java面试题库
|
2天前
|
存储 Java
java面试题大全带答案_面试题库_java面试宝典2018
java面试题大全带答案_面试题库_java面试宝典2018