【问题标题】:Remove some part of an array in Java在 Java 中删除数组的某些部分
【发布时间】:2012-03-20 19:40:01
【问题描述】:

有一个 int 类型的数组 lut_addresses[]。变量 table_ptr 有一些计算,它也是一个 int,表示数组的新基数。现在我想从索引 table_ptr 开始分配 lut_addresses[] 值,直到数组 lut_addresses[] 的最后一个索引,以便 删除 table_ptr 之前的初始值,并且 table_ptr 的值出现在 lut_addresses[] 的第 0 个索引处强>。在不将 lut_addresses 更改为 arraylist 的情况下如何做到这一点?

伪代码:

A()
{
   int lut_addresses[] = new int[2048];
   // assign values upto a cetain index
   B(lut_addresses);
};
B()
{
   int table_ptr=0;
   //calculate table_ptr;
   // assign lut_addresses[] values from index table_ptr till (lut_addresses.length-1)  
}  

【问题讨论】:

  • 需要分配 lut_addresses 的值
  • 查看我的编辑 -- System.arraycopy 是您的最佳选择。

标签: java arrays


【解决方案1】:

首先想到的是使用System.arraycopy

从指定的源数组复制一个数组,从 指定位置,到目的地的指定位置 数组。

【讨论】:

  • 澄清一下,在 Java 中执行此操作的所有方法都等效于数组副本。您不能像在 C 或 C++ 中那样直接在 Java 中操作指针。
【解决方案2】:
for (int i = startIndex; i < 2048; i++) {
  lut_addresses[i] = newValue;
}

【讨论】:

  • 我在您的问题中没有看到任何其他数组。但是你可以放置任何你想要的东西而不是newValue。例如lut_addresses[i] = source[j]。当然,您还需要增加j。但是对于这个任务System.arraycopy()会更方便。
【解决方案3】:

你也可以

  • 使用for 循环遍历所需索引,一次分配一个元素,或者
  • 使用System.arraycopy 方法,该方法将从一个数组中的给定偏移量开始复制给定数量的元素到另一个数组中的给定偏移量。

根据您后来的编辑,我应该指出 System.arraycopy 正确处理重叠的源和目标区域,使其成为您的绝佳选择。

【讨论】:

  • 我可能错了,但这种方法不会删除元素,我会得到正确元素的数组,直到索引 lut_addresses.length-table_ptr-1 并且剩余元素将保持原样。例如如果lut_addresses[]=[1,2,3,4,5,6,7,8,9,10},我会得到lut_addresses[]={4,5,6,7,8,9,10,8,9,10}
  • 你一直在改变问题,伙计,这太荒谬了。它曾经说过关于分配数组的一部分,然后是关于复制元素,现在是关于删除数组的一部分。我出去了。
  • 我正在我的项目中尝试一些东西。这就是为什么这么多变化。希望你不介意
【解决方案4】:

一旦分配了数组,您就无法更改它的大小,但是您可以将“已使用”部分的大小存储在一个变量中(这与 ArrayList 在内部所做的很接近)。因此,您可以使用System.arraycopy() 将一个数组的某些部分复制到另一个数组中,并使用一个新的int 变量来存储填充部分的大小。然后,当您进行迭代时,使用该变量而不是 lut_addresses.length 作为迭代上限。

【讨论】:

    【解决方案5】:

    我认为您可以使用IntBuffer。来自文档:

    传输连续整数序列的相对批量放置方法 从一个 int 数组或其他一些 int 缓冲区到这个缓冲区中

    【讨论】:

      【解决方案6】:

      没有像 ArrayList 那样直接获取指定元素的直接方法,所以必须先循环搜索元素,然后将其后的每个元素替换为 (index -index of searched element)。

      【讨论】:

        【解决方案7】:
        猜你喜欢
        • 1970-01-01
        • 2018-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-18
        • 1970-01-01
        • 2019-01-16
        • 1970-01-01
        相关资源
        最近更新 更多