Мне было интересно, как инициализировать целочисленный массив таким образом, чтобы его размер и значения менялись в результате выполнения моей программы, каких-либо предложений?Массивы переменной длины (динамические) в Java
ответ
Да: используйте ArrayList.
В Java «обычные» массивы имеют фиксированный размер. Вы должны дать им размер и не можете расширять их или сжимать. Чтобы изменить размер, вам нужно создать новый массив и скопировать нужные данные - что неэффективно и больно для вас.
К счастью, есть все виды встроенных классов, которые реализуют общие структуры данных и другие полезные инструменты. Вы хотите проверить the Java 6 API на полный список из них.
Одно предупреждение: ArrayList может содержать только объекты (например, целые числа), а не примитивы (например, ints). В случаях МОСТ autoboxing/autounboxing позаботится об этом для вас тихо, но вы можете получить какое-то странное поведение в зависимости от того, что вы делаете.
Вы не можете изменить размер массива. Однако вы можете создать новый массив с нужным размером и скопировать данные из старого массива в новый.
Но ваш лучший вариант - использовать IntList из jacarta commons. (here)
Он работает точно так же, как и List, но занимает меньше места и более эффективен, потому что он хранит int вместо хранения объектов-оболочек по int (это класс Integer).
Как насчет использования List
? Например, ArrayList<integer>
Массивы фиксированного размера после создания экземпляра. Вместо этого вы можете использовать список.
Autoboxing сделать список полезным, похожий на массив, вы можете просто положить Инт-значение в нем:
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
Почему вы объявляете ссылочную переменную типа List, а не ArrayList? – LppEdd
Поскольку он позволяет вам просто переключаться между реализациями List, если необходимо, вам нужно только изменить новый XYZList(). Если переменная объявлена как ArrayList, она может использовать методы, специфичные для этой реализации, делая изменения более сложными. – Mnementh
Спасибо, я понимаю. – LppEdd
Массивы в Java имеют фиксированного размера. Вам понадобится ArrayList, один из нескольких чрезвычайно ценных коллекций, доступных на Java.
Вместо
Integer[] ints = new Integer[x]
использовать
List<Integer> ints = new ArrayList<Integer>();
Затем, чтобы изменить список вы используете ints.add(y)
и ints.remove(z)
среди многих других удобных методов, которые вы можете найти в соответствующем Javadocs.
Я настоятельно рекомендую изучить классы Коллекций, доступные на Java, поскольку они очень эффективны и предоставляют вам множество встроенных функций, которые Java-новички склонны пытаться самостоятельно переписать.
хочу работать до тех пор, пока я не попытался: Список
Почему вы используете 'List
Я ответил на этот вопрос, и вам не нужен аррайалист или любая другая вещь, это было задание, и я закончил его, поэтому да массивов может увеличиться в размере.Вот ссылка How to use Java Dynamic Array и вот ссылка на мой вопрос, который я ответил Java Dynamic arrays
это просто неправильно. связанный ответ вызывает System.arrayCopy(), копируя старый массив в новый с увеличенным размером, а затем добавляя новую запись. массивы по-прежнему не могут иметь динамический размер. – katzenhut
Я не согласен с предыдущими ответами предполагая ArrayList
, потому что ArrayList
является не динамического массив, но список подкрепленной массивой. Разница заключается в том, что вы не можете сделать следующее:
ArrayList list = new ArrayList(4);
list.put(3,"Test");
Это даст вам IndexOutOfBoundsException, потому что нет ни одного элемента на этой позиции пока даже если массив поддержка позволила бы такое дополнение. Таким образом, вы должны использовать пользовательский расширяемые реализации массива, как было предложено @ похотливого внештатным
Я считаю, что вы хотели связать его с http://codereply.com/answer/6i5bur/java-dynamic-arrays.html –
Я не уверен, имеет ли ArrayList какой-либо метод put, как я вижу в исходном коде Java8. Просто пытаюсь выяснить, как он себя ведет с заданной емкостью. Однако найден метод ArrayList.add(). –
Это рекомендуется использовать список, чтобы иметь дело с малым размером шкалы.
Если у вас есть огромное количество чисел, NEVER Список использования и Autoboxing,
Список < Integer> Список
Для каждого междунар новый Integer является автоматически создается. При увеличении размера списка вы обнаружите, что он замедляется. Эти целые числа являются ненужными объектами. В этом случае, чтобы использовать предполагаемый размер будет лучше,
int[] array = new int[ESTIMATED_SIZE];
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]);
}
}
}
Источник: How to make dynamic array
- 1. Динамические массивы против массивов переменной длины
- 2. Декларирование массивы переменной длины
- 3. многомерные массивы переменной длины
- 4. Массивы переменной длины в C89?
- 5. Java Динамические массивы
- 6. Динамические массивы JAVA
- 7. Как хранить массивы переменной длины?
- 8. Массивы переменной длины в C++ 14?
- 9. Массивы переменной длины в C и C++
- 10. Как массивы переменной длины выравниваются в C?
- 11. C++ массивы переменной длины в структуре
- 12. INFORMATICA - Преобразование Java - Динамические массивы
- 13. Массивы переменной длины в зависимости от длины файла C++
- 14. Неэффективные java/массивы неизвестной длины
- 15. Почему Java массивы фиксированной длины?
- 16. Возможны массивы переменной длины с помощью Javascript
- 17. Попутный массивы переменной длины аргумента список
- 18. Как GCC реализует массивы переменной длины?
- 19. C99 массивы переменной длины Пример Wikipedia
- 20. Почему C++ не поддерживает массивы переменной длины?
- 21. Java. Instance переменной длины
- 22. Динамические массивы без вектора в java
- 23. Динамические массивы
- 24. массивы массивов разной длины в Java
- 25. C поддерживающие динамические массивы
- 26. Динамические массивы в C
- 27. Динамические массивы в Firebase
- 28. Динамические массивы в C++
- 29. Динамические массивы в C++
- 30. Динамические массивы в VBA/Excel
Интересно, почему следующий код прямо в Java? 'int [] array = new int [size];' 'size' - это переменная, но длина массива должна быть фиксированной, я прав? @Lord Torgamus –
@jerry_sjtu да, массив не меняет размер на соответствие 'размер', когда программа продолжается; он получает любой размер, находящийся в 'size', когда эта строка выполняется. – Pops
Всякий раз, когда я удаляю элемент из массива ArrayList, я заканчиваю «нуль» в конце. Любые идеи почему? –