У 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 містить речі, яких у Списку немає. Якщо ми покладаємось на ці речі у нашому коді, замінити їх стає набагато складніше.
Масиви в 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 з доданим "макс. Ключем", тому він буде знати, який ключ використовувати далі, і дивний порядок ітерацій (і дивне відношення еквівалентності між цілими клавішами та деякими рядками). Але для простих індексованих колекцій краще використовувати List в Java, як інші запропоновані відповіді.
Якщо ви хочете уникнути використання List
через накладні витрати на обертання кожного int у ціле число, розгляньте можливість використання повторної реалізації колекцій для примітивних типів, які використовують масиви всередині, але не роблять копію при кожній зміні, лише коли внутрішній масив заповнений ( так само, як ArrayList). (Одним із швидких пошукових прикладів є клас 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 - для структури, схожої на динамічний розмір.
Ви можете динамічно додавати елементи до масиву, використовуючи Framework Collection у 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 розмір масиву фіксований, але ви можете динамічно додавати елементи до масиву фіксованого розміру, використовуючи його індекс і цикл 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()));
}
}
}