我有一個字節數組,我試圖擦除數組的前50個元素。我的意思是擦除後擦除陣列的大小將比原來的小。我有兩個問題;從陣列中刪除前50個值並重新調整它的大小
- 我該如何以時間有效的方式做到這一點?
- 我認爲這是不可能的,由java本地方法重新排列數組,我錯了嗎?我搜查了,但我找不到。
我有一個字節數組,我試圖擦除數組的前50個元素。我的意思是擦除後擦除陣列的大小將比原來的小。我有兩個問題;從陣列中刪除前50個值並重新調整它的大小
您需要將它複製 - 有幾種方法可以做到這一點,for example:
byte[] newArray = Arrays.copyOfRange(originalArray, 50, originalArray.length);
或者您可以使用一個列表,並調用the subList
method避免了拷貝。
當我編譯它給出'找不到符號 符號:變量數組 位置:類接收器 '這個錯誤。 ? – user2353516 2013-05-06 14:10:17
@ user2353516你必須導入它。 – 2013-05-06 14:10:41
@ user2353516你需要'import java.util.Arrays;' – assylias 2013-05-06 14:11:08
數組大小不可變。您必須創建一個您需要的適當大小的新陣列,並複製您想要的信息。你可以做到這一點,或使用可變的數組列表。
我不認爲'ArrayList'變小時會調整大小。它也使用封面下面的數組。 – 2013-05-06 14:09:28
@SotiriosDelimanolis雖然我無法在網上找到任何支持信息,但現在我幾乎100%確定它的確如此。如果你能提供的東西,將不勝感激。 – 2013-05-06 14:13:49
@SotiriosDelimanolis我能找到的唯一支持信息是Java API網站,它傾向於我的結論http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html – 2013-05-06 14:16:01
您不能調整數組的大小,但可以將其複製到較小的數組中。
public int[] schrink(int[] input) {
return Arrays.copyOfRange(input, 49, input.length-50);
}
我建議,如果你想使用效率字節緩衝區。這允許您創建一個大緩衝區,並隨後移動開始和結束以擦除,壓縮或增長緩衝區。
問:我認爲這是不可能的,通過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;
}
不能調整的數組。使用'LinkedList'。 – 2013-05-06 14:07:23
*「我認爲這是不可能的,通過Java本地方法重新排列數組,我錯了嗎?」* - No. – Maroun 2013-05-06 14:08:23
@SotiriosDelimanolis也許你可以評論一個'List'與'byte [ ]';) –
2013-05-06 14:13:24