我有一个字节数组,我正在尝试擦除数组的前 50 个元素。我的意思是擦除数组后,它的大小将小于原始大小。我有两个问题;
- 我怎样才能以高效的方式做到这一点?
- 我认为不可能通过java本机方法重新调整数组大小,我错了吗?我已经搜索过,但我找不到。
我有一个字节数组,我正在尝试擦除数组的前 50 个元素。我的意思是擦除数组后,它的大小将小于原始大小。我有两个问题;
您将需要复制它 - 有几种方法可以做到这一点,例如:
byte[] newArray = Arrays.copyOfRange(originalArray, 50, originalArray.length);
或者,您可以使用列表并调用避免复制的subList
方法。
数组大小是不可变的。您必须创建一个具有所需大小的新数组并复制您想要的信息。您可以这样做或使用可变的数组列表。
如果你想要效率,我建议使用 ByteBuffer。这允许您创建一个大缓冲区并移动开始和结束以稍后擦除、压缩或增大缓冲区。
问:我认为通过 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;
}
您无法调整数组的大小,但可以将其复制到较小的数组中。
public int[] schrink(int[] input) {
return Arrays.copyOfRange(input, 49, input.length-50);
}