Как я могу динамически добавлять элементы в массив Java?

В PHP вы можете динамически добавлять элементы в массивы следующим образом:

$x = new Array(); $x[] = 1; $x[] = 2; 

После этого $x будет таким массивом: {1,2} .

Есть ли способ сделать что-то подобное на Java?

Посмотрите на java.util.LinkedList или java.util.ArrayList

 List x = new ArrayList(); x.add(1); x.add(2); 

Массивы на Java имеют фиксированный размер, поэтому вы не можете «добавить что-то в конце», как вы могли бы сделать в PHP.

Это похоже на поведение PHP:

 int[] addElement(int[] org, int added) { int[] result = Arrays.copyOf(org, org.length +1); result[org.length] = added; return result; } 

Тогда вы можете написать:

 x = new int[0]; x = addElement(x, 1); x = addElement(x, 2); System.out.println(Arrays.toString(x)); 

Но эта схема ужасно неэффективна для больших массивов , поскольку каждый раз она копирует весь массив. (И это на самом деле не полностью эквивалентно PHP, так как ваши старые массивы остаются прежними).

Массивы PHP на самом деле совершенно такие же, как Java HashMap с добавленным «максимальным ключом», поэтому он будет знать, какой ключ использовать следующий, и странный порядок итерации (и странное отношение эквивалентности между целыми ключами и некоторыми строками). Но для простых индексированных коллекций лучше использовать список в Java, как и другие предложенные ответчики.

Если вы хотите избежать использования List из-за накладных расходов на упаковку каждого int в Integer, рассмотрите возможность использования переопределений коллекций для примитивных типов, которые используют внутренние массивы, но не будут делать копии при каждом изменении, только когда полный массив будет заполнен (как ArrayList). (Один из примеров с быстрым поиском – это class IntList .)

Guava содержит методы создания таких оберток в Ints.asList , Longs.asList и т. Д.

Apache Commons имеет реализацию ArrayUtils для добавления элемента в конец нового массива:

 /** Copies the given array and adds the given element at the end of the new array. */ public static  T[] add(T[] array, T element) 

Вы можете использовать ArrayList а затем использовать метод toArray() . Но в зависимости от того, что вы делаете, вам может даже не понадобиться массив. Посмотрите, видите ли Lists больше, чего вы хотите.

См .: Учебник по Java-списку

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

Сначала мы должны рассмотреть, существует ли разница между array и arraylist .

Вопрос задает вопрос о добавлении элемента в массив , а не в ArrayList


Ответ довольно прост! Это можно сделать в 3 этапа.

  1. Преобразование массива в arraylist
  2. Добавить элемент в массивList
  3. Преобразование нового массива в массив

Вот простая картина введите описание изображения здесь

И, наконец, вот код:

Шаг 1:

 public List convertArrayToList(String[] array){ List stringList = new ArrayList(Arrays.asList(array)); return stringList; } 

Шаг 2:

 public List addToList(String element,List list){ list.add(element); return list; } 

Шаг 3:

 public String[] convertListToArray(List list){ String[] ins = (String[])list.toArray(new String[list.size()]); return ins; } 

Шаг 4

 public String[] addNewItemToArray(String element,String [] array){ List list = convertArrayToList(array); list= addToList(element,list); return convertListToArray(list); } 

Вы, вероятно, захотите использовать ArrayList для этого – для массива динамического размера, такого как структура.

Вы можете динамически добавлять элементы в массив с помощью Collection Frameworks в JAVA. Framework Collection не работает с примитивными типами данных.

Эта структура коллекции будет доступна в пакете «java.util. *»

Например, если вы используете ArrayList,

Создайте для него объект, а затем добавьте количество элементов (любой тип, например String, Integer … и т. Д.).

 ArrayList a = new ArrayList(); a.add("suman"); a.add(new Integer(3)); a.add("gurram"); 

Теперь вы добавили 3 элемента в массив.

если вы хотите удалить любые добавленные элементы

 a.remove("suman"); 

снова, если вы хотите добавить какой-либо элемент

 a.add("Gurram"); 

Таким образом, размер массива динамически увеличивается / уменьшается.

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

держите подсчет, где вы находитесь в примитивном массиве

 class recordStuff extends Thread { double[] aListOfDoubles; int i = 0; void run() { double newData; newData = getNewData(); // gets data from somewhere aListofDoubles[i] = newData; // adds it to the primitive array of doubles i++ // increments the counter for the next pass System.out.println("mode: " + doStuff()); } void doStuff() { // Calculate the mode of the double[] array for (int i = 0; i < aListOfDoubles.length; i++) { int count = 0; for (int j = 0; j < aListOfDoubles.length; j++) { if (a[j] == a[i]) count++; } if (count > maxCount) { maxCount = count; maxValue = aListOfDoubles[i]; } } return maxValue; } } 

Это простой способ добавить к массиву в java. Я использовал второй массив для хранения исходного массива, а затем добавил к нему еще один элемент. После этого я передал этот массив обратно в исходный.

  int [] test = {12,22,33}; int [] test2= new int[test.length+1]; int m=5;int mz=0; for ( int test3: test) { test2[mz]=test3; mz++; } test2[mz++]=m; test=test2; for ( int test3: test) { System.out.println(test3); } 

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

 package simplejava; import java.util.Arrays; /** * * @author sashant */ public class SimpleJava { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here try{ String[] transactions; transactions = new String[10]; for(int i = 0; i < transactions.length; i++){ transactions[i] = "transaction - "+Integer.toString(i); } System.out.println(Arrays.toString(transactions)); }catch(Exception exc){ System.out.println(exc.getMessage()); System.out.println(Arrays.toString(exc.getStackTrace())); } } } 
  • Массив для разметки указателя и передачи многомерных массивов в функции
  • ReDim Сохраняет multidimensional array в Visual Basic 6
  • Инициализация массива использует переменную const в C ++
  • Функция сортировки массива VBA?
  • Java: каково большое время для объявления массива размера n?
  • Как удалить элемент из массива в C #
  • Объявить массив const
  • Почему у меня возникают проблемы с назначением диапазона для массива вариантов
  • Получать случайные элементы из массива в swift
  • Как отправить массив параметров запроса на сервлет с помощью jQuery $ .ajax?
  • Обновление вложенного массива внутри массива mongodb
  • Interesting Posts

    Как кодировать перечисление с помощью NSCoder в swift?

    После переустановки Windows XP у меня есть папка, у меня больше нет прав. Как я могу восстановить контроль?

    Поиск / сортировка файлов и папок на основе того, когда они были доступны / открыты

    Условия автоматической генерации операций по умолчанию / копирование / перемещение ctor и копирования / перемещения?

    Завершение истории oh-my-zsh

    Возможно ли программирование графического интерфейса?

    Прикрепите к уже запущенной JVM

    Как удалить файл с помощью терминала из моей корзины в Mac OS X?

    Как работает CorFlags.exe / 32BIT +?

    как включить библиотеки в Java без использования IDE

    Будет ли обычная плата PCI Express работать в слот PCI Express x16 Graphics (PEG)?

    Поднятие процесса ProcessBuilder через UAC?

    Динамическое содержимое в Maps V2 InfoWindow

    Стратегия защиты от вирусов (ransomware …) для резервного копирования на NAS?

    Как редактировать текстовые файлы в командной строке Windows?

    Давайте будем гением компьютера.