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

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

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

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

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

Ответ 1

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

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

Ответ 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). (Один из примеров с быстрым поиском - это класс IntList.)

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

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

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


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

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

Вот его простая картина enter image description here

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

Шаг 1:

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

Шаг 2:

public  List<String> addToList(String element,List<String> list){

            list.add(element);
            return list;
    }

Шаг 3:

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

Шаг 4

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

Ответ 6

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

Ответ 7

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

Эта структура коллекции будет доступна в пакете "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");

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

Ответ 8

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

Ответ 9

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

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

Ответ 10

Это простой способ добавить к массиву в 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);
    }

Ответ 11

В 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()));
        }
    }

}