Меню Закрыть

Java изменить размер массива

Если я объявил массив (например, int a [5]), есть ли какой-либо метод, по которому я мог бы изменить длину [] (скажем, до 3)? т.е. мне нужно уменьшить значение a.length до 50.

Скажите, пожалуйста, решение на любом языке, который я указал.

Мне также хотелось бы как еще одна часть. если массив a [] создается динамически, и я ввел в него 100 элементов. Позже мне нужно изменить один и тот же массив, удалив последние 50 элементов. Теперь массив должен содержать только 50 элементов, а код a.length должен возвращать значение 50. Как я могу это достичь? ПРИМЕЧАНИЕ. Я не хочу использовать третью переменную или копировать содержимое в другой массив. Это делается для того, чтобы избежать потери памяти.

Вероятно, вы можете понять из других ответов, что после его создания невозможно изменить размер массива. Когда ты говоришь

вы действительно говорите, что у вас есть объект с именем "A", и вы хотите разместить там массив целых чисел и размер 5. Вы не можете изменить этот массив. Вы можете добавить в "A" новый массив целых чисел и размер 3, просто сказав:

Если вы это сделаете (если у вас нет других ссылок на него), старый массив будет выброшен сборщиком мусора. Вам просто нужно скопировать все, что было в этом старом массиве, в новое, и все готово! Это также изменит длину.

Вот небольшой тестовый код:

Это считается уродливым, потому что вы можете сделать это гораздо более элегантно, используя ArrayList, который можно изменить напрямую;

Технически это копирование массива в новый массив, но это может быть то, что вы ищете

Мне нужно написать метод, который вставляет целое число в уже отсортированный массив целых чисел, а другой — удаляет целое число из этого массива. Затем я должен распечатать тот же массив. Возможно ли сделать массив на один элемент длиннее или короче в Java?

Читайте также:  Microsoft kernel mode driver framework windows 10

Показанный код является примером из моей домашней работы.

Я попытался установить для моего нового массива исходный массив a1 в моем методе addInt, но когда я его запускаю, он просто выводит неизмененный массив. Мне не разрешено использовать ArrayList.

Редактировать: Решено. Назначение было сделано невозможным преднамеренно как упражнение, приведшее к нашему представлению ArrayList.

2 ответа

Вы не можете изменить длину массива. когда вы создаете массив типа int [] fixedLEngthArray = new int [n], вы в основном зарезервировали память для n int. если вам нужно n + 1, вам нужно будет создать новый массив, в который скопировать старый и вставить / удалить элемент.

Думаю, вы написали addInt что-то вроде этого:

Параметры метода в Java передаются значением , что в основном означает, что a в addInt и [ 116] в вызове addInt(a1, 2) две отдельные переменные. При входе в addInt , a первоначально относится к тому же массиву, что и a1 , но кроме этого нет дальнейших отношений между a и a1 , и впоследствии изменение a для ссылки на что-то еще не имеет эффект на a1 .

Ваша единственная возможность — изменить addInt так, чтобы он возвращал новый массив как результат функции:

Я искал способ изменить размер массива в Java, но я не мог найти способы изменить размер массива при сохранении текущих элементов.

Я нашел, например, код типа int[] newImage = new int[newWidth]; , но это удаляет элементы, сохраненные ранее.

мой код в принципе сделать это: если вы добавляете новый элемент, массив largens по 1. Я думаю, что это можно сделать с помощью динамического программирования, но я не уверен, как его реализовать.

11 ответов

вы не можете изменить размер массива в Java. Вам нужно либо:

Читайте также:  Фон для инстаграмма в пудровых тонах

создать новый массив нужного размера и скопировать содержимое из исходного массива в новый массив, используя java.lang.System.arraycopy(. );

использовать java.util.ArrayList класс, который делает это для вас, когда вам нужно сделать массив больше. Он прекрасно инкапсулирует то, что вы описываете в своем вопросе.

использовать java.util.Arrays.copyOf(. ) методы, которые возвращают больший массив, с содержимое исходного массива.

Не хорошо, но работает:

как указано выше, идите с ArrayList

вот несколько способов сделать это.

копирование массива из заданного исходного массива, начиная с указанной позиции в указанной позиции массива. Подпоследовательность компонентов массива копируется из исходного массива, на который ссылается src, в целевой массив, на который ссылается dest. Количество скопированных компонентов равно аргументу length. Компоненты на позиции srcPos через srcPos + length-1 в исходном массиве копируются в позиции destPos через destPos+length-1 соответственно целевого массива.

копирует указанный массив, усекая или заполняя его нулями (при необходимости), чтобы копия имела указанную длину. Для всех индексов, допустимых как в исходном массиве, так и в копии, оба массива будут содержать одинаковые ценности. Для любых индексов, допустимых в копии, но не в оригинале, копия будет содержать null. Такие индексы будут существовать тогда и только тогда, когда указанная длина больше длины исходного массива. Результирующий массив имеет тот же класс, что и исходный массив.

обратите внимание, что этот метод обычно использует System.arrayCopy() за кулисами.

Resizable-реализация массива интерфейса списка. Выполняет все дополнительные операции списка, и разрешения все элементы, включая null. В дополнение к реализации интерфейса List этот класс предоставляет методы для управления размером массива, который используется внутри для хранения списка. (Этот класс примерно эквивалентен Vector, за исключением того, что он несинхронизирован.)

ArrayList функционирует аналогично массиву, за исключением того, что он автоматически расширяется при добавлении больше элементов, чем может содержать. Это поддерживается массивом и использует массивы.copyOf.

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.