0

所以我想在特定索引中插入一个值,这意味着如果我要插入的索引不存在或大于大小,我会抛出异常,否则,我会使用这种方法来确保数组的容量不为空:

private void ensureCapacity(int size_wanted)
{
  int max_capacity = storage.length;
  if (size_wanted > max_capacity) 
  {
    max_capacity = max_capacity * GROW_FACTOR +1; 
    storage = Arrays.copyOf(storage, max_capacity); // increases array size + copy contents
  } 
}

然后在这一点上,我想扩展数组并已经制作了我原来的副本,并且已经增加了大小,对吧?

我需要做的就是使用循环并将所有内容向右移动一个,以便为我要插入的索引留出空间,对吗?

4

2 回答 2

1

您可以使用System.arrayCopy这样移动数组。但是为什么要重建ArrayList提供的现有功能

于 2012-10-03T04:28:13.563 回答
1

您不需要使用循环;您可以使用该方法System.arraycopy在数组中移动元素。它正确处理重叠范围:

System.arraycopy(storage, insertPos, storage, insertPos+1, oldSize - insertPos);
于 2012-10-03T04:28:24.177 回答