Мені було цікаво, як ініціалізувати цілий масив таким чином, щоб його розмір і значення змінювалися за рахунок виконання моєї програми, будь-яких пропозицій?
Мені було цікаво, як ініціалізувати цілий масив таким чином, щоб його розмір і значення змінювалися за рахунок виконання моєї програми, будь-яких пропозицій?
Відповіді:
Так: використовуйте ArrayList .
У Java "нормальні" масиви мають фіксований розмір. Ви повинні надати їм розмір і не можете їх розширювати чи контрактувати. Щоб змінити розмір, вам потрібно створити новий масив і скопіювати потрібні дані - що неефективно і боляче для вас.
На щастя, є всілякі вбудовані класи, які реалізують загальні структури даних, та інші корисні інструменти. Вам потрібно перевірити API Java 6 для повного їх переліку.
Одне застереження: ArrayList може містити лише об'єкти (наприклад, Цілі особи), а не примітиви (наприклад, ints). У більшості випадків автобоксинг / автобоксинг подбає про це за вас мовчки, але ви можете отримати якусь дивну поведінку залежно від того, чим займаєтесь.
size
програмі; він отримує незалежно від розміру, size
коли ця лінія виконується.
null
кінці. Будь-які ідеї чому?
Масиви на Java мають фіксований розмір. Вам знадобиться ArrayList, одна з ряду надзвичайно цінних колекцій, доступних на Java.
Замість
Integer[] ints = new Integer[x]
ти використовуєш
List<Integer> ints = new ArrayList<Integer>();
Потім для зміни списку, який ви використовуєте, ints.add(y)
і ints.remove(z)
серед багатьох інших зручних методів ви можете знайти у відповідних Javadocs.
Я настійно рекомендую вивчити класи колекцій, доступні на Java, оскільки вони дуже потужні і дають вам багато вбудованих функціональних можливостей, які новачки з Java намагаються переробляти без необхідності.
List<Integer>
замість ArrayList<Integer>
?
Масиви мають фіксований розмір один раз миттєво. Ви можете використовувати Список замість цього.
Автобоксинг зробить Список, який можна використовувати аналогічно масиву, ви можете просто ввести цілі його значення:
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
Я не погоджуюся з попередніми відповідями, що підказують ArrayList
, оскільки ArrayList
це не динамічний масив, а список, підтримуваний масивом. Різниця полягає в тому, що ви не можете зробити наступне:
ArrayList list = new ArrayList(4);
list.put(3,"Test");
Це дасть вам IndexOutOfBoundsException, оскільки в цій позиції ще немає елемента, хоча резервний масив дозволив би таке додавання. Тому вам потрібно скористатися спеціальною розширюваною реалізацією масиву, як це запропонував @ randy-lance
Simple code for dynamic array. In below code then array will become full of size we copy all element to new double size array(variable size array).sample code is below
public class DynamicArray {
static int []increaseSizeOfArray(int []arr){
int []brr=new int[(arr.length*2)];
for (int i = 0; i < arr.length; i++) {
brr[i]=arr[i];
}
return brr;
}
public static void main(String[] args) {
int []arr=new int[5];
for (int i = 0; i < 11; i++) {
if (i<arr.length) {
arr[i]=i+100;
}
else {
arr=increaseSizeOfArray(arr);
arr[i]=i+100;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println("arr="+arr[i]);
}
}
}
Джерело: Як зробити динамічний масив
Для боротьби з невеликими розмірами рекомендується використовувати List.
Якщо у вас величезна кількість номерів, НІКОЛИ використовуйте List і автобоксинг,
Список <Цілий> список
Для кожного окремого int створюється автоматично новий Integer. Ви побачите, що вона стає повільною, коли розмір списку збільшується. Ці Цілі особи - це непотрібні об'єкти. У цьому випадку краще використовувати орієнтовний розмір,
int[] array = new int[ESTIMATED_SIZE];
Як щодо використання List
замість цього? Наприклад,ArrayList<integer>
Ви не можете змінити розмір масиву. Однак можна створити новий масив потрібного розміру та скопіювати дані зі старого масиву в новий.
Але ваш найкращий варіант - використовувати IntList від спільноти jacarta. ( тут )
Він працює так само, як List, але займає менше місця і є більш ефективним, ніж це, тому що він зберігає int's замість того, щоб зберігати обгорткові об'єкти над int's (ось що є клас Integer).
Я відповів на це запитання, і ні вам не потрібен масив, або будь-яка інша річ, це було завдання, і я його виконав, щоб так масиви можуть збільшуватися в розмірі. Ось посилання Як користуватися Java Dynamic Array і ось посилання на моє запитання, на яке я відповів Java Dynamic масивів
int[] array = new int[size];
size
є змінною, але довжина масиву повинна бути виправлена, я правий? @ Lord Torgamus