Java 在数组中的特定索引处插入

Java 在数组中的特定索引处插入,java,arrays,insert,indexing,Java,Arrays,Insert,Indexing,因此,我想在特定索引中插入一个值,这意味着如果要插入的索引不存在或大于大小,我将抛出异常,否则,我将使用此方法确保数组的容量不为空: private void ensureCapacity(int size_wanted) { int max_capacity = storage.length; if (size_wanted > max_capacity) { max_capacity = max_capacity * GROW_FACTOR +1; st

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

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
  } 
}
那么在这一点上,我想扩展数组,并且已经用增加的大小复制了我的原始文件,对吗


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

您可以使用
System.arrayCopy
这样移动数组。
但是,为什么要重建由

提供的现有功能,而不需要使用循环;可以使用方法
System.arraycopy
在数组中移动元素。它可以正确处理重叠范围:

System.arraycopy(storage, insertPos, storage, insertPos+1, oldSize - insertPos);

您正在尝试构建ArrayList吗?我正在构建一个动态数组,模拟ArrayListStarrayList,其中包含您正在执行的动态数组实现。该实现已经存在。“不存在或大于大小”。实际上,你的意思是
=size
,记住索引是以0为基础的。但是我不能将最后2个参数放在里面,因为我不能更改已经准备好的方法。@RyokoNela-调用
ensureCapacity
后,调用
System.arraycopy
(使用您正在使用的变量名)。然后将新值分配给刚刚创建的插槽:
storage[insertPos]=insertValue