第1个回答 2022-07-12
我们都知道数组不能扩容,ArrayList可以扩容,但ArrayList的底层是数组,他是怎么进行扩容的呢?
一、ArrayList扩容实现步骤
1.扩容: 把原来的数组复制到另一个内存空间更大的数组中;
2.添加元素: 把新元素添加到扩容以后的数组中。
二、源码分析
关键属性:
解析ArrayList的三个构造方法:
分析常用方法:
LinkedList的扩容机制又是怎么样的呢?
1.LinkedList是一个继承于AbstractSequentialList的双向链表。
2.由于他的底层是用双向链表实现的,没有初始化大小,所以没有油扩容机制,就是一直在前面或者是后面新增就好。
二者区别:
二者的顶层接口都是Collection,
ArrayList是基于数组实现的,查询速度较快,LinkedList是双向链表,可以从头插入也可以从末尾插入,所以在增加和删除的时候比较快,是基于链式存储结构的。
LinkedList是离散空间所以不需要主动扩容,而ArrayList是连续空间,内存空间不足时,会主动扩容。
两者都不是线程安全的
参考资料:
【Java基础】ArrayList 扩容原理
ArrayList详解,看这篇就够了