当前位置: 代码迷 >> 综合 >> ArrayList学习(2)
  详细解决方案

ArrayList学习(2)

热度:84   发布时间:2023-10-08 21:21:56.0
public boolean addAll(Collection<? extends E> c) {// 给定集合转换成Object[]数组
  Object[] a  = c.toArray();
  // 加入数组的长度
  int numNew = a.length;
  // 确保集合容量足够存储
  ensureCapacityInternal(size + numNew);
  // 进行数组拷贝
  System.arraycopy(a, 0, elementData, size, numNew);
  // 集合整体长度增加
  size += numNew;
  return  numNew != 0;
}
 
 
public boolean addAll(int index, Collection<? extends E> c) {// 角标范围检查
  rangeCheckForAdd(index);
  // 将待添加的集合转换成数组
  Object[] a = c.toArray();
  // 确保容器可存储
  int numNew = a.length;
  ensureCapacityInternal(size + numNew);
  // 原集合需要移动的个数
  int numMoved = size - index;
  if(numMoved > 0) {// 安放原集合移动的元素
    System.arraycopy(elementData, index, elementData , index + numNew, numMoved);
  }// 被加入集合位置安排
  System.arraycopy(a, 0, elementData, index, numNew);
  size += numNew;
  return numNew != 0;
}private void  rangeCheckForAdd(int index) {if(index < 0 || index > size) {throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
  }
}
protected void removeRange(int fromIndex, int toIndex) {modCount++;
    int numMoved = size - toIndex;
    System.arraycopy(elementData, toIndex, elementData, fromIndex,
                     numMoved);

    // clear to let GC do its work
    int newSize = size - (toIndex-fromIndex);
    for (int i = newSize; i < size; i++) {elementData[i] = null;
    }size = newSize;
}
public void trimToSize(){modCount++;
  if(size < elementData.length) {elementData = (size == 0)? EMPTY_ELEMENTDATA  : Arrays.copyOf(elementData,size);
  }}


  相关解决方案