ArrayList LinkList效率对比

由于老师上课的时候讲到了ArrayList LinkList效率不同,于是课下查找资料,并写了一个二者效率对比的小代码。

首先通过查找资料我了解到:1. LinkedList和ArrayList的差别主要来自于Array和LinkedList数据结构的不同。ArrayList是基于数组实现的,LinkedList是基于双链表实现的。另外LinkedList类不仅是List接口的实现类,可以根据索引来随机访问集合中的元素,除此之外,LinkedList还实现了Deque接口,它代表一个双向队列,因此LinkedList可以作为双向队列 ,栈和List集合使用。

2. 因为Array是基于索引的数据结构,它使用索引在数组中搜索和读取数据是很快的,可以直接返回数组中index位置的元素,因此在随机访问集合元素上有较好的性能。Array获取数据的时间复杂度是O(1),但是要插入、删除数据却是开销很大的,因为这需要移动数组中插入位置之后的的所有元素。

3. 相对于ArrayList,LinkedList的随机访问集合元素时性能较差,因为需要在双向列表中找到要index的位置,再返回;但在插入,删除操作是更快的。因为LinkedList不像ArrayList一样,不需要改变数组的大小,也不需要在数组装满的时候要将所有的数据重新装入一个新的数组,这是ArrayList最坏的一种情况,时间复杂度是O(n),而LinkedList中插入或删除的时间复杂度仅为O(1)。ArrayList在插入数据时还需要更新索引。

4. LinkedList需要更多的内存,因为ArrayList的每个索引的位置是实际的数据,而LinkedList中的每个节点中存储的是实际的数据和前后节点的位置。

首先我们测试ArrayList LinkList增加新的内容时效率上的区别。代码如下:

ArrayList LinkList效率对比_第1张图片

测试结果为:

可以看出array比link快。可能是因为在不修改指针的时候,在往数据末尾新增的时候速度还是比LinkList速度快。

然后测试插入操作:

ArrayList LinkList效率对比_第2张图片

结果为:

可以看出link确实比array快很多,因为LinkedList不像ArrayList一样,不需要改变数组的大小,也不需要在数组装满的时候要将所有的数据重新装入一个新的数组,这是ArrayList最坏的一种情况,时间复杂度是O(n),而LinkedList中插入或删除的时间复杂度仅为O(1)。

你可能感兴趣的:(ArrayList LinkList效率对比)