学号:19011210554 姓名:袁博
转载自:https://blog.csdn.net/m0_37907797/article/details/80246625
【嵌牛导读】深入理解ArrayList、Vector与LinkedList
【嵌牛鼻子】:ArrayList、Vector与LinkedList的主要区别
【嵌牛提问】:分清ArrayList、Vector与LinkedList的使用情况
【嵌牛正文】:
ArrayList和LinkedList都实现了List接口,但它们在处理数据的方式上还是有很多区别的.
1.
*ArrayList的底层数据结构是数组且线程不安全,在增删查等方面都拥有数组的特性。例如ArrayList在插入、查找方面都是很多,和数组一样,添加时直接在尾部添加,查找时直接根据索引来查找,复杂的度都是O(1)。不过,ArrayList在删除方面就比较慢,需要把删除元素中前面的那些元素向前移动,复杂度是O(n),当然,插入方面也比较慢,复杂度为O(n)。
*LinkedList的底层数据结构是双向链表且线程不安全,具有链表的特性。因此LinkedList在插入和删除方面比较有优越性。但在查找方面的性能比较查
*Vector与ArrayList很类似,底层数据结构也是数组,不过Vector是线程安全的
2.
*虽然ArrayList与Vector很类似,不过在程序本身是线程安全的情况下,优先选择ArrayList。当你要添加一个元素进来时,Vector会请求更大的空间,每次请求都是自身的两倍,而ArrayList只对size增长50%。而且,由于Vector是线程安全的,在其他方面也会需要更大的开销。当然,在请求空间方面,LinkedList的性能更好,因为它是基于链表实时请求的。
注意:默认情况下,ArrayList的初始容量非常小,所以如果我们事先大概需要多少容量的话,可以分配一个大概的初始值,这样,可以减少ArrayList每次调整大小的开销
3.综上:在插入和删除操作比较频繁的优先选择LinkedList
在随机访问比较频繁的优先选择ArrayList
当然,这些都是建立在数据量比较大的情况下