java中的List接口(ArrayList、Vector、LinkedList)

java中的List接口(ArrayList、Vector、LinkedList)

一、List接口有三个常用的集合(ArrayList、Vector、LinkedList)

ArrayList注意事项

  • ArrayList底层是用数组来实现数据存储的 底层是 transient Object[ ] elementdata  是一个Object类型的数组
  • 这个  transient 意思是:短暂的,瞬间的 用这个关键字修饰表示 该属性不会序列化,解释:有些属性不需要被序列化,比如一些敏感的信息,银行卡密码等,一些隐私,可以用transient
  • ArrayList基本等同于Vector,ArrayList是线程不安全的,但效率高,在多线程的情况下,不建议使用ArrayList

ArrayList的源码分析

  • ArrayList底层是一个数组
  • ArrayList有两个构造器:1、一个是无参的。     2、一个是有参的构造器传入一个int类型的值,指定ArrayList数组的大小
  • 当创建ArrayList对象时,调用无参构造器,则初始化数组大小为10  也就是把 elementdata 初始化 = 10。 当添加到第11个的时候,会对数组进行扩容, 会按照 elementdata 的1.5倍扩容。 如果15个空间用完,则会以15的1.5倍扩容。从此类推,如果没给值,默认的就是null。
  • 当创建ArrayList对象时,调用有参构造器,会传入一个int值,指定数组大小。假设传入的是8,则 elementdata = 8 如果超过8个,就扩容,则是 8的1.5倍。类推,没有数据默认为null。

Vector

  • Vector底层也是一个对象数组
  • Vector底层和Arraylist几乎相同,就是一个线程安全,一个线程不安全
  • Vector是线程同步的,即线程安全,Vector操作方法有Synchoronized
  • public synchronized boolean add(E e) { 
            modCount++; 
            ensureCapacityHelper(elementCount + 1); 
            elementData[elementCount++] = e;
            return true;
    }
           
    
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » java中的List接口(ArrayList、Vector、LinkedList)