ArrayList和LinkedList的区别
- ArrayList是实现了基于动态数组的数据结构,如果内存不够,进行1.5倍扩容。而LinkedList是基于链表的数据结构,LinkedList是个双向链表,它同样可以被当作栈、队列或双端队列来使用
- 对于随机访问get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针。ArrayList想要get(int index)元素时,直接返回index位置上的元素,而LinkedList需要通过for循环进行查找。
- 对于添加和删除操作add和remove, ArrayList想要在指定位置插入或删除元素时,主要耗时的是System.arraycopy动作,会移动index后面所有的元素;LinkedList主耗时的是要先通过for循环找到index,然后直接插入或删除,无法判断谁快谁慢。当插入的数据量很小时,两者区别不太大,当插入的数据量大时,大约在容量的1/10之前,LinkedList会优于ArrayList,在其后就劣与ArrayList,且越靠近后面越差。但如果是头增或者尾插,就可以比较出他们的时间复杂度。