目录
一、ArrayList的注意事项
二、ArrayList的扩容机制(重要)
三、Vector底层结构和源码剖析
1.Vector类的定义说明
2.Vector底层也是一个对象数组
3.Vector是线程同步的,即线程安全,Vector类的操作方法带有synchronized
4.在开发中,需要线程同步安全时,考虑使用Vector
5.Vector的扩容机制
四、ArrayList与Vector的比较
注意:本文使用的是JDK11
一、ArrayList的注意事项
- ArrayList可以加入多个null
ArrayList list = new ArrayList(); list.add(null); list.add("jack"); list.add(null); System.out.println(list); // [null, jack, null]
- ArrayList是由数组来实现数据存储的
- ArrayList基本等同于Vector,ArrayList是线程不安全的,没有synchronized,该关键字是专门用于线程互斥的,因此在多线程情况下,不建议使用ArrayList。
二、ArrayList的扩容机制(重要)
ArrayList被扩容时,transient修饰的elementData属性不会被序列化
- ArrayList中维护了一个Object类型的数组elementData
transient Object[] elementData;
- 当创建ArrayList对象时,如果使用的是无参构造器,则初始elementData容量为0,第1次添加,则扩容elementData为10,如果需要再次扩容,则扩容elementData为1.5倍
- 如果使用的是指定大小的构造器,则初始elementData容量为指定大小,如果需要扩容,则直接扩容elementData为1.5倍。
三、Vector底层结构和源码剖析
1.Vector类的定义说明
2.Vector底层也是一个对象数组
3.Vector是线程同步的,即线程安全,Vector类的操作方法带有synchronized
4.在开发中,需要线程同步安全时,考虑使用Vector
5.Vector的扩容机制
- 如果是无参,默认长度为10,放满后,扩容为原来的2倍;
- 如果指定大小,则每次直接扩容为原有长度的2倍。