ArrayList和Vector都是实现了List接口的集合类,元素有序可重复,支持索引; 其中ArrayList是线程不安全的,Vector是线程安全的。两者都通过Object类型的数组elementData存放元素;其扩容机制如下: 先说结论:ArrayList 无参构造时,初始elementData为空,第一次添加元素时扩容为10,以后按1.5倍扩容 有参构造时,初始为传入参数...
1、Vector中的public方法都添加了synchronized关键字,以确保方法同步。 2、内部属性不同,这也是导致扩容方式不同的原因所在。 我现在来说第二条, ArrayList有两个属性,存储数据的数组elementData,和存储记录数目的size。 Vector有三个属性,存储数据的数组elementData,存储记录数目的elementCount,还有扩展数组大小的扩展因子...
而 ArrayList 则主要用于单线程环境下的读取、修改操作以及处理一些对空间占用未特别限制的场景,因为没有维护额外的同步机制,因此运行效率相对较高。此外,考虑到扩容机制的影响,如果需要添加大量元素,也应该选择 ArrayList,因为 Vector 可能会经常进行数组拷贝导致性能下降。总之,在开发 Java 程序时,可以根据具体的...
Vector:线程安全,但速度慢 底层数据结构是数组结构 加载因子为1:即当 元素个数 超过 容量长度 时,进行扩容 扩容增量:原容量的 1倍 如Vector的容量为10,一次扩容后是容量为20 ArrayList:线程不安全,查询速度快 底层数据结构是数组结构 扩容增量:原容量的 0.5倍+1 如ArrayList的容量为10,一次扩容后是容量为16 Se...
1 底层实现方式 ArrayList内部用动态数组来实现;LinkedList内部采用双向链表实现;Vector内部用是Java早期提供的线程安全的动态数组实现。 2 读写机制 ArrayList在执行插入元素是超过当前数组预定义的最大值时,数组需要扩容,扩容过程需要调用底层System.arraycopy()方法进行大量的数组复制操作;在删除元素时并不会减少数组的容...
(2)解析Vector扩容源码 ①首先调用add方法,与arraylist相同,vector也有一个继承父类的成员变量modCount来记录修改次数。 ②如果当前实际元素数+1大于数组定义长度,执行grow方法 ③将elementData copy到 一个新的长度数组中,完成gorw。 其中, capacityIncrement为自定义的增长因子(此处与arrayList不同,arraylist默认增长1.5倍...
ArrayList是应用更加广泛的动态数组实现,它本身不是线程安全的,所以性能要好很多。与Vector近似,ArrayList也是可以根据需要调整容量,不过两者的调整逻辑有所区 别,Vector在扩容时会提高1倍,而ArrayList则是增加50%。 LinkedList顾名思义是Java提供的双向链表,所以它不需要像上面两种那样调整容量,它也不是线程安全的。
4. 和 Vector 不同, ArrayList 不是线程安全的,在单线程下可以使用,在多线程中可以选择 Vector 或者CopyOnWriteArrayList 5. ArrayList 底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表 一、ArrayList的三个构造方法解析 public static void main(String[] args) { ...
扩容: Vector扩容每次扩充1倍, ArrayList每次扩容0.5倍。 初始化容量:Vector是在调用构造方法时,直接初始化容量为 10, ArrayList是在第一次调用添加方法时,初始化容量为10。 版本:Vector的版本是JDK1.0, ArrayList的版本是JDK1.2版。 同步、安全和效率:Vector是线程同步的安全性高,效率低, ArrayList是线程非同步的,...