Java基础之:List——ArrayList & Vector
ArrayList简单介绍
ArrayList实现了List接口,底层是一个数组,并实现了可变的功能。底层属性(transient Object[] elementData;)在序列化时,忽略该属性。
ArrayList实现了List接口,所以它可以允许出现重复值,也可以使用List中的所有方法。
ArrayList与Vector基本相同,ArrayList是线程不安全的,但比Vector效率更高。
ArrayList底层源码分析
ArrayList底层维护了一个Object类型的数组elementData。(transient Object[] elementData;)
当创建对象时,如果是用的是无参构造器public ArrayList(),则默认初始化elementData容量为0。
当添加元素时:先判断是否有足够的容量进行添加,若不够则进行扩容,调用grow()方法,若足够则直接在对应位置添加元素即可。
在使用无参构造public ArrayList()的情况下第一次扩容默认为10,之后再需要扩容的话,则扩容elementData为1.5倍,即10 + 10 / 2 = 15
若使用有参构造public ArrayList(int initialCapacity),则默认初始化elementData容量为initialCapacity。那么在第一次扩容时,则直接扩容elementData到1.5倍initialCapacity。
源码追踪
代码说明:
package class_ArrayList;import java.util.ArrayList;public class ClassTest01_Debug { @SuppressWarnings({ "unchecked", "rawtypes" }) public static void main(String[] args) { ArrayList arrayList = new ArrayList(); for(int i = 0 ; i < 10;i++) { //这里添加第一个元素时,将arrayList进行扩容,默认扩容为10 arrayList.add("hello" + i); } for(int i = 0 ; i < 5;i++) { //这里添加元素时,已经是arrayList的第11个位置,再次对其扩容,10 + 10 / 2 = 15 arrayList.add("hello" + i); } //这里添加元素时,已经是arrayList的第16个位置,再次对其扩容,即15 + 15 / 2 = 22 arrayList.add("hi01"); arrayList.add("hi02"); arrayList.add("hi03"); }}
Vector简单介绍
public class Vector<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
Vector底层也是一个可变对象数组( protected Object[] elementData;)。
Vector是线程安全的,Vector类的操作方法都带有synchronized:
public synchronized boolean add(E e) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = e;
return true;
}
由于Vector使用方法基本上和ArrayList没有差别,所以这里就不再赘述。
ArrayList与Vector比较
在实际开发中,使用更多的还是ArrayList,只有在确实需要线程同步安全时,才考虑使用Vector。
原文转载:http://www.shaoqun.com/a/504069.html
kk馆:https://www.ikjzd.com/w/1713
王惟:https://www.ikjzd.com/w/1744
Java基础之:List——ArrayList&VectorArrayList简单介绍ArrayList实现了List接口,底层是一个数组,并实现了可变的功能。底层属性(transientObject[]elementData;)在序列化时,忽略该属性。ArrayList实现了List接口,所以它可以允许出现重复值,也可以使用List中的所有方法。ArrayList与Vector基本相同,
海拍客:海拍客
dmm.adult:dmm.adult
去西冲露营怎么样才能睡得舒服?:去西冲露营怎么样才能睡得舒服?
口述:我让亲妹妹做了老公的小三(3/3):口述:我让亲妹妹做了老公的小三(3/3)
快上车!Wish首发成人用品编辑政策与规范!:快上车!Wish首发成人用品编辑政策与规范!
没有评论:
发表评论