Добавление элемента в массив с циклом

296
04 марта 2017, 03:04

Есть такая конструкция

String[] massiv = { getResources().getString(R.info),"4432"};
ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>(massiv.length);
HashMap<String, Object> map;
for (int i = 0; i < massiv.length; i++) {
    map = new HashMap<String, Object>();
    map.put("key", massiv[i]);
    data.add(map);
}

Всё работает, но, не понимаю как можно добавить элемент в massiv программно, теоретически, с других классов, чтобы по нему проходил цикл. Ну например кликаешь по кнопке, событие подхватывает какую то строку, и забрасывает ее в massiv и по ней идет цикл. С помощью add можно обратиться только к ArrayList, но с другой стороны там условие massiv.length. Надеюсь, вы поняли, что я имею ввиду?

Answer 1

Используйте вместо массива список List. Его гораздо проще изменять динамически.

List<String> massiv = new ArrayList<>();
massiv.add(getResources().getString(R.info));
massiv.add("4432");
ArrayList<Map<String, Object>> data = new ArrayList<>(massiv.size());
HashMap<String, Object> map;
for(int i = 0; i < massiv.size(); i++) {
    map = new HashMap<>();
    map.put("key", massiv.get(i));
    data.add(map);
}
Answer 2

Размер массива в Java задается при его создании и далее изменить его нельзя.

В этой строке:

String[] massiv = { getResources().getString(R.info),"4432"};

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

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

Однако можно создать новый массив бОльшего размера, поместить в него элементы старого массива и новый элемент, однако, если Вам нужна такая функциональность, то лучше использовать соответствующие готовые решения, такие как расширяемый массив (ArrayList), либо, например, связный список (LinkedList).

READ ALSO
Ошибка: Index out of range

Ошибка: Index out of range

Что не так с кодом?

351
textArea.getDocument().addDocumentListener

textArea.getDocument().addDocumentListener

ЗдравствуйтеСтолкнулся с такой проблемой, у меня при инитиализации приложения создается DocumentListener, который отвечает за подсветку синтаксика,...

308
Где найти компонент для ввода градуса, минуты, секунды?

Где найти компонент для ввода градуса, минуты, секунды?

Нужен компонент (на подобии DatePickerDialog) для выбора градусов, минут и секундЕсть ли такое или как это можно самому сделать

281