浅谈ArrayList、Vector与LinkedList的一些区别

版权声明:转载需要经过同意 https://blog.csdn.net/m0_37907797/article/details/80246625

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

当然,这些都是建立在数据量比较大的情况下


猜你喜欢

转载自blog.csdn.net/m0_37907797/article/details/80246625
今日推荐