2013-05-06 25 views
0

我有一個字節數組,我試圖擦除數組的前50個元素。我的意思是擦除後擦除陣列的大小將比原來的小。我有兩個問題;從陣列中刪除前50個值並重新調整它的大小

  • 我該如何以時間有效的方式做到這一點?
  • 我認爲這是不可能的,由java本地方法重新排列數組,我錯了嗎?我搜查了,但我找不到。
+3

不能調整的數組。使用'LinkedList'。 – 2013-05-06 14:07:23

+0

*「我認爲這是不可能的,通過Java本地方法重新排列數組,我錯了嗎?」* - No. – Maroun 2013-05-06 14:08:23

+1

@SotiriosDelimanolis也許你可以評論一個'List '與'byte [ ]';) – 2013-05-06 14:13:24

回答

4

您需要將它複製 - 有幾種方法可以做到這一點,for example

byte[] newArray = Arrays.copyOfRange(originalArray, 50, originalArray.length); 

或者您可以使用一個列表,並調用the subList method避免了拷貝。

+0

當我編譯它給出'找不到符號 符號:變量數組 位置:類接收器 '這個錯誤。 ? – user2353516 2013-05-06 14:10:17

+0

@ user2353516你必須導入它。 – 2013-05-06 14:10:41

+0

@ user2353516你需要'import java.util.Arrays;' – assylias 2013-05-06 14:11:08

1

數組大小不可變。您必須創建一個您需要的適當大小的新陣列,並複製您想要的信息。你可以做到這一點,或使用可變的數組列表。

+0

我不認爲'ArrayList'變小時會調整大小。它也使用封面下面的數組。 – 2013-05-06 14:09:28

+0

@SotiriosDelimanolis雖然我無法在網上找到任何支持信息,但現在我幾乎100%確定它的確如此。如果你能提供的東西,將不勝感激。 – 2013-05-06 14:13:49

+0

@SotiriosDelimanolis我能找到的唯一支持信息是Java API網站,它傾向於我的結論http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html – 2013-05-06 14:16:01

0

您不能調整數組的大小,但可以將其複製到較小的數組中。

public int[] schrink(int[] input) { 
return Arrays.copyOfRange(input, 49, input.length-50); 
} 
1

我建議,如果你想使用效率字節緩衝區。這允許您創建一個大緩衝區,並隨後移動開始和結束以擦除,壓縮或增長緩衝區。

1

問:我認爲這是不可能的,通過java native方法重新排列數組,我錯了嗎?我已經搜索,但我找不到。答:您不能從數組中移除一個元素,但將該元素的值設置爲空或爲空。但這就是爲什麼有其他有效collentions,如LinkedList,ArrayList,Vectors ..

問:我如何以時間有效的方式做到這一點? A.你需要兩個數組。看看下面的代碼:

它的作用是複製第二個數組..剩餘內容的有效方式

public int[] removeElement(int[] array, int del) 
{ 
    int[] result = new int[array.length - 1]; 
    System.arraycopy(array, 0, result, 0, del); 
    if (array.length != del) 
    { 
     System.arraycopy(array, del + 1, result, del, array.length - del - 1); 
    } 
    return result; 
}