0

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

  • 我怎样才能以高效的方式做到这一点?
  • 我认为不可能通过java本机方法重新调整数组大小,我错了吗?我已经搜索过,但我找不到。
4

5 回答 5

4

您将需要复制它 - 有几种方法可以做到这一点,例如

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

或者,您可以使用列表并调用避免复制subList方法。

于 2013-05-06T14:08:23.297 回答
1

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

于 2013-05-06T14:08:37.063 回答
1

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

于 2013-05-06T14:12:38.733 回答
1

问:我认为通过 java 本地方法重新调整数组大小是不可能的,我错了吗?我已经搜索过,但我找不到。A. 您不能从 Array 中删除元素,但将元素的值设置为空或 null。但这就是为什么还有其他有效的集合,例如 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;
}
于 2013-05-06T14:58:12.980 回答
0

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

public int[] schrink(int[] input) {
return Arrays.copyOfRange(input, 49, input.length-50);
}
于 2013-05-06T14:09:37.780 回答