简单了解ArrayList和LinkedList
List
ArrayList和LinkedList本质上的区别是数组和链表之间的增删改查的区别,ArrayList多一个扩容机制而已
ArrayList
底层是数组
add()
先判断是否需要扩容
再插入
grow()
1.5倍扩容,如果初始为0,那么扩容到1;如果初始为1,那么扩容到2
new一个新的数组,Arrays.copyof() 将旧的数组copy过去
remove()
检查位置是否合法,然后删除,需要调用native方法移动数组元素
get()
根据下标直接返回元素
LinkedList
底层是双向链表,一头头节点,一个尾节点
add()
尾插法插入新的节点
remove()
拿到待删除节点的前后节点,进行双向链表那样的删除
get()
会用二分法先优化一下,索引位置和链表长度/2先比对一下,然后在左半边遍历还是右半边遍历
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 白兰!