В PHP вы можете динамически добавлять элементы в массивы следующими способами:
$x = new Array();
$x[] = 1;
$x[] = 2;
После этого $x
будет массив как это: {1,2}
.
Есть ли способ сделать что-то подобное на Java?
В PHP вы можете динамически добавлять элементы в массивы следующими способами:
$x = new Array();
$x[] = 1;
$x[] = 2;
После этого $x
будет массив как это: {1,2}
.
Есть ли способ сделать что-то подобное на Java?
Ответы:
Посмотрите 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
хотите ли вы большего.
Вероятно, вы захотите использовать для этого 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()));
}
}
}