ArrayList与LinkedList的扩容

如题所述

第1个回答  2022-07-12
我们都知道数组不能扩容,ArrayList可以扩容,但ArrayList的底层是数组,他是怎么进行扩容的呢?

一、ArrayList扩容实现步骤

1.扩容: 把原来的数组复制到另一个内存空间更大的数组中;

 2.添加元素: 把新元素添加到扩容以后的数组中。

二、源码分析

关键属性:

解析ArrayList的三个构造方法:

分析常用方法:

LinkedList的扩容机制又是怎么样的呢?

1.LinkedList是一个继承于AbstractSequentialList的双向链表。

2.由于他的底层是用双向链表实现的,没有初始化大小,所以没有油扩容机制,就是一直在前面或者是后面新增就好。

二者区别:

二者的顶层接口都是Collection,

ArrayList是基于数组实现的,查询速度较快,LinkedList是双向链表,可以从头插入也可以从末尾插入,所以在增加和删除的时候比较快,是基于链式存储结构的。

LinkedList是离散空间所以不需要主动扩容,而ArrayList是连续空间,内存空间不足时,会主动扩容。

两者都不是线程安全的

参考资料:

【Java基础】ArrayList 扩容原理

ArrayList详解,看这篇就够了
相似回答