首页 > 试题广场 >

说出ArrayList,Vector, LinkedList

[问答题]

说出ArrayList,Vector, LinkedList的存储性能和特性?

Arraylist : 数组式连续内存存储。适合随机访问,查询,不适合插入删除,会消耗大量时间。线程不同步,效率高
vector: 数组式连续内存存储。适合随机访问,查询,不适合插入删除,会消耗大量时间。支持线程同步,线程安全,内部加锁,效率低
linkedlist: 链表式存储。不适合随机访问查询,适合插入删除操作。
发表于 2019-07-09 21:55:13 回复(0)
ArrayList和Vector用动态数组存储,ArrayList默认空间大小为10当数组满时,ArrayList空间变为1.5倍,Vector变为2.0倍,Arraylist线程不安全,Vector线程安全,两者的查询效率较快,但在向中间插入或删除时时间消耗较大,效率较低。
LinkedList用链表存储,线程不安全,查询某个元素的效率比上面两者要低,但在需要向中间插入或删除元素时,效率更高。
所有,在需要大量查询操作,更多的可以向尾部添加删除操作时,用ArrayList或Vector较好,当单线程时,ArrayList效率较Vector来说更高。
当需要大量的插入删除操作时,用LinkedList更好。
发表于 2019-08-25 20:34:16 回复(0)
YL,头像 YL,

ArrayListVector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

     LinkedList也是线程不安全的,LinkedList提供了一些方法,使得LinkedList可以被当作堆栈和队列来使用。

发表于 2019-07-10 10:17:07 回复(0)
ArrayList 以动态数组的形式存储数据,可以按下标随机访问,读取效率高,但是删除和增加的效率不高,每次对数组进行扩容都要消耗额外的内存进行数据迁移。
LinkedList 以链表的形式存储数据,不支持随机访问,所以每次访问某一数据都要从首节点开始,但是相对于 ArrayList ,它插入和删除更具优势,可以在常数级复杂度完成。


发表于 2019-07-09 19:28:49 回复(0)
ArrayList:是对数组的封装,底层使用的数据结构就是Object数组,其性能和特性:查询快可以根据下标来查询,在中间删除和插入性能低,线程不安全,当数组中数据存储满时,会创建新数组,其容量是原来的1.5倍进行数据拷贝
Vector:底层和ArrayList一样都是对数组进行封装,只是他的方法都是同步的方法,因此是线程安全的,效率要比ArrayList的效率低
LinkedList:底层使用的数据结构是双向链表结构,其性能是:插入删除速度快,但根据下标查询每次要从要从头或从尾来查询效率不高,线程不安全的
发表于 2019-07-08 17:18:22 回复(0)

ArrayList,Vector都是用数组方式存储数据都可直接按位置序号索引元素,但插入元素要涉及数组元素移动等操作,所以插入速度慢而索引速度快;Vector与ArrayList相比较线程安全;LinkedList双向链表结构,索引元素时需要遍历,但插入数据只需要记录本项的前后项,所以插入数据速度快而索引速度慢

发表于 2019-06-29 14:44:50 回复(0)
ArrayList和Vector都是使用数组方式存储数据而LinkedList使用双向链表实现存储
发表于 2019-06-13 09:35:10 回复(0)
ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector中的方法由于添加了synchronized修饰,因此Vector是线程安全的容器,但性能上较ArrayList差,因此已经是Java中的遗留容器。

        LinkedList使用双向链表实现存储(将内存中零散的内存单元通过附加的引用关联起来,形成一个可以按序号索引的线性结构,这种链式存储方式与数组的连续存储方式相比,内存的利用率更高),按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

         Vector属于遗留容器(Java早期的版本中提供的容器,除此之外,Hashtable、Dictionary、BitSet、Stack、Properties都是遗留容器),已经不推荐使用,但是由于ArrayList和LinkedListed都是非线程安全的,如果遇到多个线程操作同一个容器的场景,则可以通过工具类Collections中的synchronizedList方法将其转换成线程安全的容器后再使用(这是对装潢模式的应用,将已有对象传入另一个类的构造器中创建新的对象来增强实现)。

原文:https://blog.csdn.net/qq_38216661/article/details/82355647 

发表于 2019-06-08 10:19:07 回复(0)