从原始数组中删除一个元素

Removing an element from a primitive array

我有一个基本类型数组,我想从中删除指定索引处的元素。正确有效的方法是什么?

我希望通过下面提到的方式删除元素

long[] longArr = {9,8,7,6,5};
int index = 1;

List list = new ArrayList(Arrays.asList(longArr));
list.remove(index);
longArr = list.toArray(); // getting compiler error Object[] can't be converted to long[]

但是上面的方法看起来只适用于对象而不适用于基元。

有什么替代方案吗?我无法使用任何第三个 party/additional 库

您需要新建一个数组并复制其中的元素;例如像这样:

public long[] removeElement(long[] in, int pos) {
    if (pos < 0 || pos >= in.length) {
        throw new ArrayIndexOutOfBoundsException(pos);
    }
    long[] res = new long[in.length - 1];
    System.arraycopy(in, 0, res, 0, pos);
    if (pos < in.length - 1) {
        System.arraycopy(in, pos + 1, res, pos, in.length - pos - 1);
    }
    return res;
}

注意:以上内容尚未经过测试/调试....

您也可以使用 for 循环进行复制,但 arraycopy 在这种情况下应该更快。

org.apache.commons.lang.ArrayUtils.remove(long[], int) 方法很可能像上面的代码一样工作。如果您不需要避免使用第 3 方开源库,则使用该方法会更好。 (感谢@Srikanth Nakka 知道/找到它。)

您不能使用列表来执行此操作的原因是列表需要的元素类型是引用类型。

除了 StephenC 的回答外,看看 https://www.cs.cmu.edu/~adamchik/15-121/lectures/Arrays/arrays.html

它很好地解释了 java 数组。

使用org.apache.commons.lang.ArrayUtils.

long[] longArr = {9,8,7,6,5};
int index = 1;
longArr=ArrayUtils.remove(longArr, index);
Integer[] arr = new Integer[] {100,150,200,300};

List<Integer> filtered = Arrays.asList(arr).stream()
    .filter(item -> item < 200)
    .collect(Collectors.toList());