2012-03-20 50 views
0

有一個int類型的數組lut_addresses []。對於一個變量table_ptr也有一些計算,它也是一個int值,並且表示數組的新基數。現在我想分配從索引table_ptr開始直到數組lut_addresses []的最後索引的lut_addresses []值,以便到table_ptr的初始值被刪除,並且table_ptr處的值存在於lut_addresses []的第0個索引處。我怎樣才能做到這一點,而不需要將lut_addresses改爲arraylist?刪除Java中的某個數組的一部分

僞代碼:

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) 
} 
+0

需要被分配 – developer 2012-03-20 11:20:09

+0

看到我編輯的lut_addresses的價值觀 - 'System.arraycopy'是你最好的選擇。 – 2012-03-20 11:40:27

回答

4

想到的第一件事就是使用System.arraycopy

複製從指定的源陣列的陣列,在所述 指定位置開始,到目的地 陣列的指定位置。

+0

爲了澄清,在Java中執行此操作的每種方式都等同於陣列副本。您不能像在C或C++中那樣直接操作Java中的指針。 – 2012-03-20 17:33:42

+0

@LouisWasserman:我完全同意。 – npinti 2012-03-20 19:37:33

1

你既可以

  • 使用for循環,運行在期望指標,分配單元一次一個,或
  • 使用System.arraycopy方法,它將從一個數組中給定偏移量開始的給定數量的元素複製到另一個數組中的給定偏移量。

根據你以後的編輯,我要指出的是System.arraycopy正確處理重疊的源和目標區域,使之成爲您的最佳選擇。

+0

我可能錯了,但這種方法不會刪除元素,我會得到正確的元素數組,直到索引'lut_addresses.length-table_ptr-1'和remaning元素將保持原來的位置。如果'lut_addresses [] = [1,2,3,4,5,6,7,8,9,10}',我會得到'lut_addresses [] = {4,5,6,7,8, 9,10,8,9,10}' – 2012-03-20 12:09:12

+1

你一直在改變這個問題,男人,這太可笑了。它曾經說過關於分配數組的一部分,然後是關於複製元素,現在是關於刪除數組的一部分。我出去了。 – 2012-03-20 12:17:40

+0

我正在嘗試在我的項目中的東西。這就是爲什麼這麼多的變化。希望你不介意 – 2012-03-20 12:21:54

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

我還沒有看到任何其他陣列在你的問題。但是你可以放置任何你想要的而不是'newValue'。例如'lut_addresses [i] = source [j]'。當然,你還需要增加'j'。但是對於這個任務'System.arraycopy()'會更方便。 – AlexZam 2012-03-20 11:42:27

0

在分配數組後,您不能更改數組的大小,但可以將「已使用」部分的大小存儲在變量中(這與ArrayList的內部接近)。因此,您可以使用System.arraycopy()將一個數組的一部分複製到另一個數組中,並使用新的變量來存儲填充的部分的大小。然後,在迭代時,使用該變量而不是lut_addresses.length作爲上限迭代限制。

0

我想你可以使用IntBuffer。從文檔:

相對批量put方法轉移整數 的連續序列從int陣列或一些其它INT緩衝器到此緩衝區

0

沒有直接的方法來直接獲得指定的元件就像在ArrayList中一樣,所以你必須先循環搜索元素,然後用(搜索元素的索引 - 索引)替換每個元素。