一、ArrayList
1.数据结构
数组 -> 顺序表。
2.插入数据
在数组中间插入数据,其后的数据都会往后copy,时间复杂度为O(n)。
3.删除数据
与插入类似,同样涉及数据的copy,时间复杂度为O(n)。
4.查找元素
通过下标查找元素,非常快,时间复杂度为O(1)。
二、LinkedList
1.数据结构
链表。
2.插入数据
指定位置上断开链表,插入新元素,重新连接成链表,时间复杂度为O(1)。
3.删除元素
指定位置上断开链表,删除元素,重新连接成链表,时间复杂度为O(1)。
4.查找元素
遍历链表查找指定元素,时间复杂度为O(n)。
三、对比
插入和删除效率,LinkedList更快。
查找效率,ArrayList更快。
四、思考
1.如果一个数组要反复插入删除,怎么优化降低时间复杂度?
当删除元素时,并不是真正删除元素,而是将删除的位置标记为null或其他标记,当内部不足时,使用for循环遍历数据,删除被标记为null的元素。(JVM使用到的标记-删除算法)