Vector、ArrayList、LinkedList 的区别
Vector、ArrayList、LinkedList 的区别
Vector 的特点
Verctor 是 Java 早期使用比较普遍的数组,并且是线程安全的,但是截至目前使用场景已经很少了,更多时候都使用线程安全的 List,或者使用 Collections 生成封装的 List,因为 Vector 在内部的插入删除效率比较低,只能在 Vector 的最后进行增加和删除。
但是 Vector 和数组的不同之处在于创建的时候可以不用指定 Vector 的大小,当然 Vector 内部也会默认分配大小,在使用时 Vector 也会自动重新分配调整内存,支持随机访问。
ArrayList 的特点
ArrayList 是比较普遍和经典的动态数组实现,并且由于 ArrayList 不是线程安全的,所以性能一般会相对较高。与 Vector 一样,ArrayList 在使用时也会动态的按需调整容量大小,不过内部的调整逻辑和 Vector 不同,ArrayList 每次扩容是增加 1.5 倍大小,而 Vector 是每次增加 2 倍的大小。
LinkedList 的区别的特点
LinkedList 底层存储数据的结构是双向链表,因为是链表结构,所以在创建时不会必须规定容量,在使用时也没有最大容量限制或者需要内部动态调整容量,最大容量一般就是 Integer 的最大值,并且 ArrayList 线程是不安全的。
总结
Vector 和 ArrayList 同具有动态数组的特性,内部元素都是以数组形式存储的,并且元素都是有序的,所以非常适合随机访问的场景。但是新增元素和删除元素的性能相对较差,除了操作最后一个元素外,每次新增元素都会将新增元素索引之后的元素往后移动一位,每次删除元素也都会将删除元素所在索引的后面元素都往前移动一位。
版权声明: 本文为 InfoQ 作者【zarmnosaj】的原创文章。
原文链接:【http://xie.infoq.cn/article/83c4abb207e564533cc1b68e7】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论