ArrayList底层的实现原理是什么
-
ArrayList底层是用动态数组实现的
-
ArrayList初始容量为0,当第一次添加数据的时候才会初始化容量为10
-
ArrayList在进行扩容的时候是原来容量的1.5倍,每次扩容都需要拷贝数组
-
ArrayList在添加数据的时候
-
确保数组已使用长度(size)加1之后足够存下下一个数据
-
计算数组的容量,如果当前数组已使用长度+1后的大于当前的数组长度,则调用grow方法扩容(原来的1.5倍)确保新增的数据有地方存储之后,则将新元素添加到位于size的位置上。
-
返回添加成功布尔值。
-
ArrayList与LinkedList的区别
-
底层数据结构
-
ArrayList 动态数组
-
LinkedList双向链表
-
-
操作效率
-
ArrayList支持索引下标查询,随机访问速率较高,但是底层是动态数组实现的,在插入和删除元素时,适度较慢
-
LinkedList随即查询速率较慢,在插入和删除时,速度较快,不需要移动元素
-
-
内存占用
-
ArrayList底层是数组实现的,内存空间连续,更节省空间(但可能会浪费内存)
-
LinkedList是双向链表,需要存储数据和两个指针,更占用内存(使用了
lucene
工具进行计算集合内存占用,发信LinkedList占用的存储空间几乎是ArrayList 的两倍)
-
-
使用场景(可以不描述)
-
ArrayList适用于频繁查找的操作
-
LinkedList使用于频繁插入和删除的操作
-