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:04  jock_javaEE  阅读(56)  评论(0)    收藏  举报