ArrayList的底层和扩容

编程入门 行业动态 更新时间:2024-10-24 16:31:15

ArrayList的<a href=https://www.elefans.com/category/jswz/34/1768082.html style=底层和扩容"/>

ArrayList的底层和扩容

对ArrayList的理解

此文为参考javaguide所提供的面试题,从中总结,如想了解详情,请点击链接
javaguide

1.简介

ArrayList是List的实现类,它的底层是用Object数组存储,线程不安全

适合用于频繁的查询工作,因为底层是数组,可以快速通过数组下标进行查找。

2.ArrayList与LinkedList的区别(5个方面)

1.他们都是线程不安全的。

2.ArrayList底层是object数组,linkedlist底层是使用双向链表。

3.ArrayList是采用数组存储,所以插入和删除元素的时间复杂度受元素位置影响。add方法将指定的元素添加到列表的末尾,为O(1)。在指定位置 i 插入和删除元素的话(add(int index, E element))时间复杂度就为 O(n-i) 。linkedlist是使用双向链表的,所以插入和删除元素的时间复杂度受不受元素位置影响。在指定位置 i 插入和删除元素的话(add(int index, E element))时间复杂度就为 O(n)需要移动到指定的位置在插入。

4.ArrayList可以快速随机访问,它实现了RandomAccess接口(RandomAccess这个接口是标记接口,实现它代表该结构支持快速随机访问)。linkedList不支持。

5.内存占用情况:A 浪费空间体现在它的底层是数组所以要在末尾预留一定容量的空间。L的每一个元素占用的空间都比A的多,因为是双向链表(存在前继和后继以及数据)

线程安不安全,底层数据结构,插入和删除的时间复杂度,快速随机访问,内存占用

3.ArrayList源码的理解
6个参数
 private static final long serialVersionUID = 8683452581122892189L;
/*** 默认初始容量大小*/
private static final int DEFAULT_CAPACITY = 10;/*** 空数组(用于空实例)。*/
private static final Object[] EMPTY_ELEMENTDATA = {};//用于默认大小空实例的共享空数组实例。//我们把它从EMPTY_ELEMENTDATA数组中区分出来,以知道在添加第一个元素时容量需要增加多少。
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};/*** 保存ArrayList数据的数组*/
transient Object[] elementData; // non-private to simplify nested class access/*** ArrayList 所包含的元素个数*/
private int size;
3个构造方法

一个带初始容器参数的构造函数,一个默认构造函数,一个包含指定集合的元素的集合。

需要注意默认构造函数(this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;)*实际上初始化赋值的是一个空数组。当真正对数组进行添加元素操作时,才真正分配容量。即向数组中添加第一个元素时,数组容量扩为 10

/*** 带初始容量参数的构造函数(用户可以在创建ArrayList对象时自己指定集合的初始大小)*/public ArrayList(int initialCapacity) {if (initialCapacity > 0) {//如果传入的参数大于0,创建initialCapacity大小的数组this.elementData = new Object[initialCapacity];} else 

更多推荐

ArrayList的底层和扩容

本文发布于:2024-02-11 17:16:22,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1682212.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:底层   ArrayList

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!