эквивалентно push () или pop () для массивов?
Я пытаюсь добавлять, удалять и ссылаться на элементы из массива, который я создаю в своем основном файле java, но у меня возникли проблемы с определением правильного синтаксиса. В actionscript у них есть push() и pop () для добавления и удаления элементов в массиве, есть ли эквивалент в android?
5 ответов:
использовать список выбора http://developer.android.com/reference/java/util/ArrayList.html
в Java массив имеет фиксированный размер (после инициализации), что означает, что вы не можете добавлять или удалять элементы из массива.
int[] i = new int[10];
приведенный выше фрагмент означает, что массив целых чисел имеет длину 10. Невозможно добавить одиннадцатое целое число, не переназначив ссылку на новый массив, например:
int[] i = new int[11];
в Java пакет java.util содержит все виды структур данных, которые может обрабатывать добавление и удаление элементов из массива-как коллекции. Классический стек структуры данных имеет методы для push и pop.
для тех, у кого нет времени на рефакторинг кода для замены массивов на
Collection
s (напримерArrayList
), есть альтернатива. В отличие отCollection
s, длина массива не может быть изменена, но массив может быть заменен, например:array = push(array, item);
недостатки в том, что
- весь массив должен быть скопирован каждый раз, когда вы нажимаете, и
- исходный массив
Object
не изменяется, поэтому вы должны обновить переменную(ы) как соответствующий.здесь
push
методString
:
(Вы можете создать несколькоpush
методы, один дляString
, дляint
, etc)private static String[] push(String[] array, String push) { String[] longer = new String[array.length + 1]; for (int i = 0; i < array.length; i++) longer[i] = array[i]; longer[array.length] = push; return longer; }
эта альтернатива более эффективна, короче и труднее читать:
private static String[] push(String[] array, String push) { String[] longer = new String[array.length + 1]; System.arraycopy(array, 0, longer, 0, array.length); longer[array.length] = push; return longer; }
можно использовать
Arrays.copyOf()
С небольшим отражением, чтобы сделать хорошую вспомогательную функцию.public class ArrayHelper { public static <T> T[] push(T[] arr, T item) { T[] tmp = Arrays.copyOf(arr, arr.length + 1); tmp[tmp.length - 1] = item; return tmp; } public static <T> T[] pop(T[] arr) { T[] tmp = Arrays.copyOf(arr, arr.length - 1); return tmp; } }
использование:
String[] items = new String[]{"a", "b", "c"}; items = ArrayHelper.push(items, "d"); items = ArrayHelper.push(items, "e"); items = ArrayHelper.pop(items);
результаты
Оригинал: a, b, c
массив после push-вызовов: a, b, c, d, e
массив после pop вызова: a, b, c, d