List

一 ArrayList

debug ArrayList new和add

1 ArrayList维护一个Objecet类型数据elementData

transient Object[] elementData

transient 表示瞬间,短暂的,表示该属性不会被序列化

 

2 当创建ArralyList对象时,如果使用的是无参构造器,则初始elementData容量为0,

第一次添加,则扩容elementData为10,如需再次扩容,则扩容elementData为1.5倍

 

3 如果使用的是指定大小的构造器,则初始elementData容量为指定大小,如需要扩容,

则直接扩容elementData为1.5倍

 

二 Vector

Vector底层也是一个对象数组,protected Object[] elementData

Vector是线程同步的,即线程安全,Vector类的操作方法带有synchronized

开发中,需要线程同步安全时,考虑使用Vector

 

三 LinkedList

1 LinkedList底层维护了一个双向链表

2 LinkedList中维护了两个属性first和last分别指向首节点和尾节点

3 每个节点(Node对象),维护了prev,next,item三个属性,其中通过prev指向前一个,通过next指向后一个节点,最终实现双向链表

4 LinkedList的元素的添加和删除,不是通过数组完成的,相对来说效率较高。

 

-------------------------------------------------------------------

如何选择ArrayList和LinkedList

1 如果改查操作多,使用ArrayList

2 如果增删操作多,使用LinkedList

3 大部分场景都是查询,所以大部分情况使用ArrayList,实际情况根据业务来选择

 

posted @ 2021-06-28 10:33  chentaohere  阅读(85)  评论(0)    收藏  举报