ArrayList和LinkedList都是我们常用的集合实现类,下面就介绍一下它们的特点以及它们的区别
ArrayList
ArrayList继承自AbstractList类,实现了 List 接口。底层基于数组实现容量大小动态变化。它是非线程安全的,一般多用于单线程环境下,允许 null 的存在。同时还实现了 RandomAccess、Cloneable、Serializable 接口,所以ArrayList 是支持快速访问、复制、序列化的。
LinkedList
LinkedList是一种可以在任何位置进行高效地插入和移除操作的有序序列,本质是双向链表,LinkedList包含三个比较重要的成员:first、last和size。first指向双向链表的表头。last指向双向链表的尾部。size是双向链表中节点的个数。他可以被当做堆栈、队列和双端队列来使用。它分别实现了List 接口、Deque 接口、Cloneable接口、Serializable接口使得LinkedList能进行队列操作、当作双端队列使用、能克隆、支持序列化。
ArrayList和LinkedList的区别
对于ArrayList,它在集合的末尾删除或添加元素所用的时间是一致的,但是在列表中间的部分添加或删除时所用时间就会大大增加。但是它在根据索引查找元素的时候速度很快。
对于LinkedList则相反,它在插入、删除集合中任何位置的元素所花费的时间都是一样的,但是它根据索引查询一个元素的时候却比较慢,特别是在链表中间的元素。
ArrayList是实现了基于动态数组的数据结构,LinkedList是基于链表结构。
对于随机访问的get和set方法,ArrayList要优于LinkedList,因为LinkedList要移动指针。
对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。
所以在我们进行对元素的增删查操作的时候,进行 查操作时用ArrayList,进行增删操作的时候最好用LinkedList。