ArrayList类

ArrayList类

 

ArrayList:

源码分析:

  • DEFAULT_CAPACITY = 10;默认容量 注意:如果没有向集合中添加任何元素时,容量0,添加一个元素之后 容量10,每次扩容大小是原来的1.5倍

  • elementData 存放元素的数组

  • size 实际元素个数

  • add() 添加元素

 public boolean add(E e) {
         ensureCapacityInternal(size + 1);  // Increments modCount!!
         elementData[size++] = e;
         return true;
    }
   private void ensureCapacityInternal(int minCapacity) {
         ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
    }
 private static int calculateCapacity(Object[] elementData, int minCapacity) {
         if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
             return Math.max(DEFAULT_CAPACITY, minCapacity);
        }
         return minCapacity;
    }
 private void ensureExplicitCapacity(int minCapacity) {
         modCount++;
 ​
         // overflow-conscious code
         if (minCapacity - elementData.length > 0)
             grow(minCapacity);
    }
 private void grow(int minCapacity) {
         // overflow-conscious code
         int oldCapacity = elementData.length;
         int newCapacity = oldCapacity + (oldCapacity >> 1);
         if (newCapacity - minCapacity < 0)
             newCapacity = minCapacity;
         if (newCapacity - MAX_ARRAY_SIZE > 0)
             newCapacity = hugeCapacity(minCapacity);
         // minCapacity is usually close to size, so this is a win:
         elementData = Arrays.copyOf(elementData, newCapacity);
    }

 

posted @ 2022-01-09 21:11  少时凌云志  阅读(33)  评论(0)    收藏  举报