2016-04-09 4 views
1

У меня есть массив примитивных типов, из которого я хочу удалить элемент по указанному индексу. Каков правильный и эффективный способ сделать это?Удаление элемента из массива primitve

Я ищу, чтобы удалить элемент в пути нижеперечисленного

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[] 

но выше подход выглядит для работы с с объектом только не с примитивами.

Любая альтернатива этому? Я не могу использовать какой-либо третьей стороне/дополнительные библиотеки

Благодаря

+0

Попробуйте объявить свой список как «Список » вместо «Список». – Sam

+0

уже опробован Список list = new ArrayList (Arrayys.asList (longArr)). Это дает ошибку компилятора «нет подходящего конструктора для ArrayList (Список )» –

+0

См. Также http://stackoverflow.com/questions/12029515/convert-long-to-long-primitive-java – Sam

ответ

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; 
} 

NB: выше не был проверен/отлажена ....

Вы можете также сделать копирование с использованием для петель, но arraycopy должен быть быстрее, в этом случае.

Метод org.apache.commons.lang.ArrayUtils.remove(long[], int), скорее всего, работает как приведенный выше код. Использование этого метода было бы предпочтительнее ... если бы вам не потребовалось избегать использования сторонних библиотек с открытым исходным кодом. (Kudos to @Srikanth Nakka за то, что вы знали/находили его.)

Причина, по которой вы не можете использовать список для этого, состоит в том, что для списков требуется тип элемента, который является ссылочным типом.

+0

спасибо..выглядит хорошо –

0

Использование org.apache.commons.lang.ArrayUtils.

long[] longArr = {9,8,7,6,5}; 
int index = 1; 
longArr=ArrayUtils.remove(longArr, index); 
Смежные вопросы