我有一个原始类型数组,我想从中删除指定索引处的元素。这样做的正确有效方法是什么?
我希望以下面提到的方式删除元素
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[]
但是上面的方法看起来只使用Object而不是原语。
除此之外的其他选择?我不能使用任何第三方/额外的库
答案 0 :(得分:5)
您需要创建一个新数组并复制元素;例如像这样的东西:
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)
方法最有可能像上面的代码一样工作。如果您不需要避免使用第三方开源库,那么使用该方法将更可取。 (感谢@Srikanth Nakka知道/找到它。)
您无法使用列表执行此操作的原因是列表需要作为引用类型的元素类型。
答案 1 :(得分:0)
除了StephenC的回答,请查看https://www.cs.cmu.edu/~adamchik/15-121/lectures/Arrays/arrays.html。
它很好地解释了java数组。
答案 2 :(得分:0)
使用org.apache.commons.lang.ArrayUtils。
https://www.goodreads.com/search/index.xml?&key=ZuqW9sL15d3JvEwmLyaNCg&q=lord%20rings or https://www.goodreads.com/search/index.xml?&key=ZuqW9sL15d3JvEwmLyaNCg&q=lord+rings
答案 3 :(得分:0)
Integer[] arr = new Integer[] {100,150,200,300};
List<Integer> filtered = Arrays.asList(arr).stream()
.filter(item -> item < 200)
.collect(Collectors.toList());