ArrayList和Vector

ArrayList注意事项

  1. 可以加入多个null
  2. 由数组来实现数据存储
  3. 基本等同于Vector,ArrayList是线程不安全,但是执行效率高

    并没有使用 synchronized()

ArrayList底层操作机制源码

  1. ArrayList中维护了一个Object类型的数组elementData,transient Object[] elementData transient 表示不会被序列号
  2. 当创建ArrayList对象时,如果使用的无参构造器,则初始elementData的容量为0,第一次添加,则扩容elementData为10,如需要再次扩容,则扩容element为1,5倍
  3. 如果使用的是指定大小的容器,则初始elementData容量为指定大小,如需要再次扩容,则直接扩容elementData为1.5倍

源码分析

无参构造



创建一个空的elementData数组

ensureCapacityInternal()是否要扩容
第一次扩容为10

modcount记录修改次数,避免多线程,minCapacity-elementData.length如果elementData的长度不够了,就grow进行底层扩容

有参构造


如果有数值>0就直接new,否则就按照无参构造的扩容方法

Vector特点

  1. 底层也是一个对象数字
  2. 线程安全,vector类的操作方法带有 synchronized
  3. 安全,效率不高
  4. 扩容倍数:如果是无参,默认10,则后面2倍扩容,如果指定大小,则后面按2倍扩容
posted @ 2023-02-08 21:51  jiaxinZz  阅读(20)  评论(0)    收藏  举报