【问题标题】:Insert at a specific index in array在数组中的特定索引处插入
【发布时间】:2012-10-03 04:21:43
【问题描述】:

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

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
  } 
}

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

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

【问题讨论】:

  • 您是否正在尝试构建 ArrayList?
  • 我构建了一个模仿arraylist的动态数组
  • ArrayList 包含你正在做的动态数组实现已经存在了。
  • “不存在或大于大小”。实际上,您的意思是 >= size,记住索引是从 0 开始的。

标签: java arrays insert indexing


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 但是我又不能把最后两个参数放在里面,因为我不能改变一个已经准备好的方法。
    • @RyokoNela - 之后调用ensureCapacity,调用System.arraycopy(使用您正在使用的任何变量名称)。然后将新值分配给刚刚创建的插槽:storage[insertPos] = insertValue;。
    猜你喜欢
    • 2019-11-20
    • 2015-11-08
    • 2022-01-25
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多