ArrayList和LinkedList的区别

来源:互联网 发布:api数据接口 编辑:程序博客网 时间:2024/05/17 19:58

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之后所有元素。

 

为什么LinkedList中随机访问很慢,而ArrayList中随机访问很快?

1.    LinkedList:

通过get(int index)获取LinkedList第index个元素时。先是在双向链表中找到要index位置的元素;找到之后再返回

双向链表查找index位置的节点时,有一个加速动作:若index < 双向链表长度的1/2,则从前向后查找; 否则,从后向前查找。

2.    ArrayList:

通过get(int index)获取ArrayList第index个元素时。直接返回数组中index位置的元素,而不需要像LinkedList一样进行查找。
原创粉丝点击