用Java删除数组的某些部分

时间:2012-03-20 11:14:53

标签: java arrays

有一个类型为int的数组lut_addresses []。变量table_ptr有一些计算,它也是一个int,表示数组的新基数。现在我想将lut_addresses []值从索引table_ptr开始分配到数组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)  
}  

7 个答案:

答案 0 :(得分:4)

首先想到的是使用System.arraycopy

  

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

答案 1 :(得分:1)

你可以

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

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

答案 2 :(得分:1)

for (int i = startIndex; i < 2048; i++) {
  lut_addresses[i] = newValue;
}

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

  

相对批量放置方法,用于转移连续的整数序列   从一个int数组或一些其他int缓冲区到这个缓冲区

答案 5 :(得分:0)

没有像ArrayList那样直接获取指定元素的直接方法,所以你必须首先循环搜索元素,然后用(index-index索引元素)替换每个元素。

答案 6 :(得分:0)