持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第22天,点击查看活动详情
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 同具有动态数组的特性,内部元素都是以数组形式存储的,并且元素都是有序的,所以非常适合随机访问的场景。但是新增元素和删除元素的性能相对较差,除了操作最后一个元素外,每次新增元素都会将新增元素索引之后的元素往后移动一位,每次删除元素也都会将删除元素所在索引的后面元素都往前移动一位。