ArrayList 篇章

ArrayLis 是一个数组列表,它的底层实现的 Object 数组 , 有时候我们会用 ArrayList 来存储一些基本数据结构,比如 int, float,double... ,其实这些都是存储的他们的一个包装类。

ArrList 与 Java的数组的区别

  1. ArrList 支持动态的扩容,而数组的长度是固定的 。
  2. ArrList 能够存储对象,支持不同类型的数据 ,数组的存储类型是固定的。

属性定义

 private static final int DEFAULT_CAPACITY = 10;

 private static final Object[] EMPTY_ELEMENTDATA = {};

 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

 transient Object[] elementData
 
 private int size;

有参构造

//传递一个初始化的值 initialCapacity
 public ArrayList(int initialCapacity) {
        if (initialCapacity > 0) {
            //如果initialCapacity 大于0 的话就创建个 Object 对象 的数组 长度为 initialCapacity
            this.elementData = new Object[initialCapacity];
        } else if (initialCapacity == 0) {
            //如过等于0的话 ,那么就将 EMPTY_ELEMENTDATA 这个空对象赋给当前对象的 elementData 
            this.elementData = EMPTY_ELEMENTDATA;
        } else {
            //如果都不是的话就抛出一个异常
            throw new IllegalArgumentException("Illegal Capacity: "+initialCapacity);
        }
    }

无参构造

    public ArrayList() {
        //赋值一个空对象给 elementData 
        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
    }

这边可以得出ArryaList 初始化,要么是给他赋值,要么默认为空.

add方法

public boolean add(E e) {
        // e 为我们添加的对象   ensureCapacityInternal 的 size + 1 等于 1 传递下去
        ensureCapacityInternal(size + 1);  // Increments modCount!!
        elementData[size++] = e;
        return true;
    }
进入 ensureCapacityInternal 方法
 //就收到参数 1
 private void ensureCapacityInternal(int minCapacity) {
       //传递参数 calculateCapacity
        ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));

    }

进入到 calculateCapacity(elementData, minCapacity)

  private static int calculateCapacity(Object[] elementData, int minCapacity) {
          if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
              return Math.max(DEFAULT_CAPACITY, minCapacity);
          }
          return minCapacity;
      }
posted @ 2023-09-24 13:09  手提麻袋  阅读(50)  评论(0)    收藏  举报