public void add(int index, E element)的方法源码分析

  public class ArrayList<E> extends AbstractList<E>
          implements List<E>, RandomAccess, Cloneable, java.io.Serializable{

          public void add(int index, E element) {
              rangeCheckForAdd(index); // 校验数组是否越界

              ensureCapacityInternal(size + 1); 

              System.arraycopy(elementData, index, elementData, index + 1,
                               size - index); // 将指定索引位置后的元素全部向右移动一位

              elementData[index] = element;

              size++;
          }

         // 根据给定的最小容量和当前数组元素来计算所需容量。
          private void ensureCapacityInternal(int minCapacity) {
              // 如果当前数组元素为空数组(初始情况),返回默认容量和最小容量中的较大值作为所需容量
              if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
                  minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
              }

              ensureExplicitCapacity(minCapacity);
         }

         // 判断是否需要扩容
         private void ensureExplicitCapacity(int minCapacity) {
            modCount++;

            // 判断当前数组容量是否足以存储minCapacity个元素
            if (minCapacity - elementData.length > 0)
                // 调用grow方法进行扩容
                grow(minCapacity);
        }

  }




  // 测试方法
  public class Main {
      public static void main(String[] args) {
          ArrayList<String> list = new ArrayList<>();
          list.add("1");
          list.add("2");
          list.add("3");
          list.add(1, "4");
          System.out.println(list);
      }
  }
posted @ 2024-04-30 17:03  jock_javaEE  阅读(9)  评论(0编辑  收藏  举报