В PHP вы можете динамически добавлять элементы в массивы следующими способами:
$x = new Array();
$x[] = 1;
$x[] = 2;
После этого $x
будет массив как это: {1,2}
.
Есть ли способ сделать что-то подобное на Java?
java
arrays
dynamic-arrays
kamikaze_pilot
источник
источник
Ответы:
Посмотрите java.util.LinkedList или java.util.ArrayList
List<Integer> x = new ArrayList<Integer>(); x.add(1); x.add(2);
источник
int[]
), просто используйтеtoArray()
метод в List. Используйте приведенный выше код, но используйте,x.toArray()
чтобы получить примитивный массив.ARRAY
объектов Oracle, или какой-нибудь глупости в этом роде , вам гораздо лучше избегать примитивных массивов.List
ссылки позволяет нам приступитьArrayList
к работе в любое время, когда мы захотим. Если кто-то выпустит лучший список, напримерSuperDuperAwesomeList
, у нас может быть много работы, если мы сделаем ссылку наArrayList
. В ArrayList есть вещи, которых нет в List. Если мы полагаемся на эти вещи в нашем коде, становится намного сложнее поменять местами.Массивы в 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). (Одним из примеров быстрого поиска в Google является этот класс IntList .)Гуава содержит методы создания таких оболочек в
Ints.asList
,Longs.asList
и т.д.источник
ArrayList
, за исключением того, что вместо изменения размера при каждом добавлении, когда ему не хватает места, он удваивается в размере, поэтому его не нужно изменять так часто.org
он на единицу корочеresult
.В 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)
источник
Я очень часто встречал этот вопрос в сети и, на мой взгляд, многие люди с хорошей репутацией не ответили на эти вопросы должным образом. Поэтому я хотел бы высказать здесь свой собственный ответ.
Во-первых, мы должны учесть разницу между
array
иarraylist
.Вопрос просит добавить элемент в массив , а не ArrayList
Ответ довольно прост. Это можно сделать за 3 шага.
Вот простая картина этого
И, наконец, вот код:
Шаг 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); }
источник
Вы можете использовать,
ArrayList
а затем использоватьtoArray()
метод. Но в зависимости от того, что вы делаете, вам может вообще не понадобиться массив. Посмотрите,Lists
хотите ли вы большего.См .: Руководство по спискам Java.
источник
Вероятно, вы захотите использовать для этого ArrayList - для массива динамического размера, такого как структура.
источник
Вы можете динамически добавлять элементы в массив с помощью Collection Frameworks в JAVA. collection 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");
Таким образом, размер массива динамически увеличивается / уменьшается.
источник
Используйте 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 размер массива фиксирован, но вы можете динамически добавлять элементы в массив фиксированного размера, используя его индекс и цикл for. Пожалуйста, найдите пример ниже.
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())); } } }
источник