В 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);
Массивы на 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
и т.д.
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)
Вы можете использовать ArrayList
, а затем использовать метод toArray()
. Но в зависимости от того, что вы делаете, вам может даже не понадобиться массив. Посмотрите, если Lists
больше того, что вы хотите.
Смотрите: Учебник по Java-списку
Я часто встречал этот вопрос в Интернете, и, на мой взгляд, многие люди с высокой репутацией не ответили на эти вопросы должным образом. Поэтому я хотел бы выразить свой собственный ответ здесь.
Сначала мы должны рассмотреть, существует ли разница между 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 для этого - для массива с динамическим размером, например структуры.
Вы можете динамически добавлять элементы в массив с помощью 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");
Таким образом, размер массива динамически растет/уменьшается..
Используйте 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()));
}
}
}