LinkedList和ArrayList性能差异分析:
为什么LinkedList中插入元素很快,而ArrayList中插入元素很慢?
1. 通过add(int index, E element)向LinkedList插入元素时。先是在双向链表中找到要插入节点的位置index;找到之后,再插入一个新节点。
双向链表查找index位置的节点时,有一个加速动作:若index < 双向链表长度的1/2,则从前向后查找; 否则,从后向前查找。
2. 向ArrayList指定位置插入元素,首先是ensureCapacity(size+1),它的作用是“确认ArrayList的容量,若容量不够,则增加容量。”
真正耗时的操作是 System.arraycopy(elementData, index, elementData, index + 1, size -index); 然后会移动数组index之后所有元素。
为什