从阵列中删除前50个值并重新调整大小

时间:2013-05-06 14:06:18

标签: java

我有一个字节数组,我试图擦除数组的前50个元素。我的意思是擦除,在擦除阵列后,它的大小将小于原始阵列。我有两个问题;

  • 我怎样才能以节省时间的方式做到这一点?
  • 我认为通过java native方法重新调整大小数组是不可能的,我错了吗?我搜索过但我找不到。

5 个答案:

答案 0 :(得分:4)

您需要复制它 - 有几种方法可以执行此操作,for example

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

或者,您可以使用列表并调用the subList method来避免复制。

答案 1 :(得分:1)

数组大小不可变。您必须创建一个具有所需大小的新阵列,并复制所需的信息。您可以这样做或使用可变的arraylist。

答案 2 :(得分:1)

如果你想要效率,我建议使用ByteBuffer。这允许您创建一个大缓冲区并移动开始和结束以便稍后擦除,压缩或增大缓冲区。

答案 3 :(得分:1)

Q值。我认为通过java native方法重新调整大小数组是不可能的,我错了吗?我搜索过但我找不到。 答:您无法从Array中删除元素,但将元素的值设置为空或null。但这就是为什么还有其他有效的组合,如LinkedList,ArrayList,Vectors ..

Q值。我怎样才能以时间有效的方式做到这一点? 答:您需要两个阵列。请看下面的代码:

它的作用是以有效的方式复制第二个数组中的剩余内容

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;
}

答案 4 :(得分:0)

您无法调整阵列大小,但可以将其复制到较小的阵列中。

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