ArrayList源码分析

ArrayList是一个动态数组,能够自动增长容量,线程不安全,适用于单线程,在多线程的情况下,推荐使用Collection.synchronizedList(List list)返回一个ArrayList进行使用,或者是直接使用concurrent并发包里面的CopyOnWriteArrayList:

ArrayList实现了四个接口:

        List:

        Cloneable:实现克隆功能

        Serializable:实现序列化接口

        RandomAccess:实现随机读写

ArrayList常量:

        final long serialVersionUID = 8683452581122892189L;//定义序列化id

        final int DEFAULT_CAPACITY = 10;//定义初始化容量

        final Object[] EMPTY_ELEMENTDATA = {};//定义空数组实例

        final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};//定义默认的空数组实例

ArrayList变量:

        transient Object[] elementData; //存储ArrayList的缓冲区数组,== DEFAULTCAPACITY_EMPTY_ELEMENTDATA可用来清除缓冲区,不需要进行序列化

        private int size;//数组大小

构造方法:

      方法一:指定容量构造参数

      public ArrayList(int initialCapacity) {
          if (initialCapacity > 0) {
               this.elementData = new Object[initialCapacity];
          } else if (initialCapacity == 0) {
               this.elementData = EMPTY_ELEMENTDATA;
          } else {
               throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
           }
       }

    方法二:默认初始容量构造方法

       public ArrayList() {
                this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;//创建默认初始容量的数组大小
       }

     方法三:将其他集合转化为ArrayList

       public ArrayList(Collection<? extends E> c) {//将其他结构转化为一个数组
                elementData = c.toArray();//将一个集合对象转化为数组
                if ((size = elementData.length) != 0) {//如果长度不为空
                       // c.toArray might (incorrectly) not return Object[] (see 6260652)
                       if (elementData.getClass() != Object[].class)//判断对象类型
                               elementData = Arrays.copyOf(elementData, size, Object[].class);
                      } else {
                      // replace with empty array
                      this.elementData = EMPTY_ELEMENTDATA;
                }
        }

常用公有方法:

        ensureCapacity(int minCapacity):增大容量

        trimToSize:去除多余的空间(存储容量1200,实例1000,调用之后容量改为1000)

        未完待续

        

        

 

        

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

圣·杰克船长

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值