我有一个原始类型数组,我想从中删除指定索引处的元素。正确而有效的方法是什么?
我正在寻找以下面提到的方式删除元素
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一起使用,而不能与原语一起使用。
还有其他选择吗?我不能使用任何第三方/附加库
您需要创建一个新数组并复制元素。例如这样的事情:
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在这种情况下应更快。
arraycopy
该org.apache.commons.lang.ArrayUtils.remove(long[], int)方法最有可能像上面的代码一样工作。如果不需要避免使用第三方开放源代码库,则最好使用该方法。(对@Srikanth Nakka知道/找到它表示敬意。)
org.apache.commons.lang.ArrayUtils.remove(long[], int)
之所以不能使用列表来执行此操作,是因为列表要求元素类型是引用类型。