Arraylist和linkedlist的区别:

Arraylist和linkedlist的区别:

  1. 实现的不同:ArrayList是实现了基于动态数组的数据结构,而LinkedList是基于链表的数据结构;
  2. 访问速度的不同:随机访问get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针;
  3. 插入删除速度的不同:一般都认为LinkedList要比ArrayList快,但是这仅适用于从随机位置插入(因为数组从中间插入,需要移动元素),当从尾部插入数据时,插入的数据量很小时,两者区别不太大,当插入的数据量大时,大约在容量的1/10之前,LinkedList会优于ArrayList,在其后就劣与ArrayList,且越靠近后面越差。

    ArrayList想要get(int index)元素时,直接返回index位置上的元素,而LinkedList需要通过for循环进行查找,虽然LinkedList已经在查找方法上做了优化,比如index < size / 2,则从左边开始查找,反之从右边开始查找,但是还是比ArrayList要慢。这点是毋庸置疑的。ArrayList想要在指定位置插入或删除元素时,主要耗时的是System.arraycopy动作,会移动index后面所有的元素;LinkedList主耗时的是要先通过for循环找到index,然后直接插入或删除。这就导致了两者并非一定谁快谁慢。

    所以当插入的数据量很小时,两者区别不太大,
    当插入的数据量大时,大约在容量的1/10之前,LinkedList会优于ArrayList,在其后就劣与ArrayList,且越靠近后面越差。所以个人觉得,一般首选用ArrayList,由于LinkedList可以实现栈、队列以及双端队列等数据结构,所以当特定需要时候,使用LinkedList,数据量小的时候,两者差不多,视具体情况去选择使用;当数据量大的时候,如果只需要在靠前的部分插入或删除数据,那也可以选用LinkedList,反之选择ArrayList反而效率更高。



 

猜你喜欢

转载自blog.csdn.net/qq_30757161/article/details/89945146