《Java设计模式深入讲解分析项目实战》(完整版)

变量

size ArrayList实际个数

transient Object[] elementData;储存数组
private static final int DEFAULT_CAPACITY = 10;默认个数是10个

构造方法

 
  1. public ArrayList() {

  2. this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;

  3. }

 
  1. public ArrayList(int initialCapacity) {

  2. if (initialCapacity > 0) {

  3. this.elementData = new Object[initialCapacity];

  4. } else if (initialCapacity == 0) {

  5. this.elementData = EMPTY_ELEMENTDATA;

  6. } else {

  7. throw new IllegalArgumentException("Illegal Capacity: "+

  8. initialCapacity);

  9. }

  10. }

它是如何扩展的呢

 
  1. private void grow(int minCapacity) {

  2. // overflow-conscious code

  3. int oldCapacity = elementData.length;

  4. int newCapacity = oldCapacity + (oldCapacity >> 1);

  5. if (newCapacity - minCapacity < 0)

  6. newCapacity = minCapacity;

  7. if (newCapacity - MAX_ARRAY_SIZE > 0)

  8. newCapacity = hugeCapacity(minCapacity);

  9. // minCapacity is usually close to size, so this is a win:

  10. elementData = Arrays.copyOf(elementData, newCapacity);

  11. }

一般发生在什么时候,add的时候进行调用,扩展是1.5倍

add方法

 
  1. public boolean add(E e) {

  2. ensureCapacityInternal(size + 1); // Increments modCount!!

  3. elementData[size++] = e;

  4. return true;

  5. }

 
  1. public void add(int index, E element) {

  2. rangeCheckForAdd(index);

  3.  
  4. ensureCapacityInternal(size + 1); // Increments modCount!!

  5. System.arraycopy(elementData, index, elementData, index + 1,

  6. size - index);

  7. elementData[index] = element;

  8. size++;

  9. }

rangeCheckForAdd是看看索引会不会越界,ensureCapacityInternal看看是否需要扩容

remove的话将数组某下标设置为空

一般使用for循环去遍历的

猜你喜欢

转载自blog.csdn.net/wangjun0916/article/details/90030994