эквивалентно push () или pop () для массивов?


Я пытаюсь добавлять, удалять и ссылаться на элементы из массива, который я создаю в своем основном файле java, но у меня возникли проблемы с определением правильного синтаксиса. В actionscript у них есть push() и pop () для добавления и удаления элементов в массиве, есть ли эквивалент в android?

5 57

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.

для тех, у кого нет времени на рефакторинг кода для замены массивов на Collections (например ArrayList), есть альтернатива. В отличие от Collections, длина массива не может быть изменена, но массив может быть заменен, например:

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

вы можете использовать LinkedList. У него есть методы peek, poll и offer.

можно использовать 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