Как уменьшить массив java
Изменить размер массива, сохраняя текущие элементы в Java?
Я искал способ изменить размер массива в Java, но не смог найти способы изменения размера массива при сохранении текущих элементов.
Мой код будет в основном делать это: всякий раз, когда добавляется новый элемент, массив увеличивается на 1. Я думаю, что это можно сделать с помощью динамического программирования, но я не уверен, как его реализовать.
9 ответов
Вы не можете изменять размер массива в Java. Вам нужно также:
Создайте новый массив нужного размера и скопируйте содержимое из исходного массива в новый массив, используя java.lang.System.arraycopy(. );
Не нравится, но работает:
как указано выше, перейдите ArrayList
Вот несколько способов сделать это.
Копирует массив из указанного исходного массива, начиная с указанной позиции, в указанную позицию целевого массива. Подпоследовательность компонентов массива копируется из исходного массива, на который ссылается src, в массив назначения, на который ссылается dest. Количество копируемых компонентов равно аргументу длины. Компоненты в позициях srcPos через srcPos + length-1 в исходном массиве копируются в позиции destPos через destPos + length-1 соответственно целевого массива.
Копирует указанный массив, обрезает или заполняет нулями (если необходимо), поэтому копия имеет указанную длину. Для всех индексов, которые действительны как в исходном массиве, так и в копии, два массива будут содержать одинаковые значения. Для любых индексов, которые действительны в копии, но не в оригинале, копия будет содержать нуль. Такие индексы будут существовать тогда и только тогда, когда указанная длина больше, чем заданная длина исходного массива. Получившийся массив имеет тот же класс, что и исходный массив.
Обратите внимание, что этот метод обычно использует System.arrayCopy() за кулисами.
Реализованная реализация интерфейса списка. Выполняет все необязательные операции с списками и разрешает все элементы, включая null. В дополнение к реализации интерфейса List этот класс предоставляет методы для управления размером массива, который используется внутри для хранения списка. (Этот класс примерно эквивалентен Vector, за исключением того, что он несинхронизирован.)
Изменить размер массива, сохраняя текущие элементы в Java?
11 ответов
Вы не можете изменить размер массива в Java. Вам нужно либо:
Создайте новый массив нужного размера и скопируйте содержимое из исходного массива в новый массив, используя java.lang.System.arraycopy(. );
Не красиво, но работает:
как указано выше, используйте ArrayList
Вот несколько способов сделать это.
Копирует массив из указанного исходного массива, начиная с указанной позиции, в указанную позицию целевого массива. Подпоследовательность компонентов массива копируется из исходного массива, на который ссылается src, в целевой массив, на который ссылается dest. Количество копируемых компонентов равно аргументу длины. Компоненты в позициях от srcPos до srcPos + length-1 в исходном массиве копируются в позиции destPos через destPos + length-1, соответственно, целевого массива.
Копирует указанный массив с усечением или заполнением нулями (если необходимо), чтобы копия имела указанную длину. Для всех индексов, которые действительны как в исходном массиве, так и в копии, эти два массива будут содержать одинаковые значения. Для любых индексов, которые действительны в копии, но не в оригинале, копия будет содержать ноль. Такие индексы будут существовать, если и только если указанная длина больше, чем у исходного массива. Полученный массив имеет тот же класс, что и исходный массив.
Реализация массива изменяемого размера интерфейса List. Реализует все необязательные операции со списком и разрешает все элементы, включая ноль В дополнение к реализации интерфейса List этот класс предоставляет методы для управления размером массива, который используется внутри для хранения списка. (Этот класс примерно эквивалентен Vector, за исключением того, что он не синхронизирован.)
Изменение размера массива при сохранении текущих элементов в Java?
Я искал способ изменить размер массива в Java, но я не мог найти способы изменить размер массива при сохранении текущих элементов.
мой код в принципе сделать это: если вы добавляете новый элемент, массив 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.
Как обрезать массив целых чисел в Java?
давайте, чтобы у меня было число N. N будет размером массива.
однако содержимое массива будет содержать любое другое число от 1 до положительного N. Это означает, что весь массив размера N не будет заполнен после этого для цикла. Поэтому после цикла for я хочу обрезать (или изменить размер) массива, чтобы в массиве больше не было пустых слотов.
допустим, N = 5; Это означает, что после цикла for, любой другой число от 1 до 5 будет в массиве следующим образом:
int arr[] = новый int[N];
Теперь я хочу обрезать (или изменить размер) после цикла for, чтобы индексы, содержащие null, исчезли, а затем массив должен быть:
размер массива теперь равен 2.
4 ответов
вы не можете изменить размер массива в Java после его создания. Однако вы можете создать новый массив нужного вам размера.
вот для функции Java под названием авто-бокс почти весь код, который работает с примитивными int значения, также работает с Integer значения.
вы не можете обрезать массив. Самый быстрый подход-просто скопировать его в меньший, используя систему.arraycopy, который почти всегда намного быстрее, чем цикл for:
вы, конечно, лучше с какой-то более подходящей структурой данных, например, список или набор в зависимости от того, что ваше намерение с ним позже. Таким образом, вам даже не нужно создавать структуру размера N, чтобы вам все равно пришлось ее уменьшить. Скорее вы создаете пустой список и добавляете элементы, которые вам действительно нужны
Я думаю,что есть немного более короткий способ сделать обрезку. Осталось найти правильный индекс.
Операции с массивом на Java
Узнайте, как мы можем обрабатывать операции общего массива на Java.
1. Обзор
Любой java-разработчик знает, что создание чистого и эффективного решения при работе с операциями массива не всегда легко достичь. Тем не менее, они являются центральной частью экосистемы Java – и нам придется иметь дело с ними несколько раз.
По этой причине, это хорошо иметь “чит лист” – резюме наиболее распространенных процедур, которые помогут нам решать головоломки быстро. Этот учебник пригодится в таких ситуациях.
2. Классы массивов и помощников
Прежде чем приступить к работе, полезно понять, что такое массив в Java и как его использовать. Если вы впервые работаете с ним на Java, мы предлагаем взглянуть на этот предыдущий пост, где мы рассмотрели все основные понятия.
Обратите внимание, что основные операции, которые поддерживает массив, в определенном смысле ограничены. Это не редкость, чтобы увидеть сложные алгоритмы для выполнения относительно простых задач, когда дело доходит до массивов.
По этой причине, для большинства наших операций, мы будем использовать помощник классов и методов, чтобы помочь нам: Массивы класс, предоставляемый Java и Apache ArrayUtils Один.
Чтобы включить последнее в наш проект, мы должны добавить Апач Викисклад зависимость:
3. Получить первый и последний элемент массива
Это одна из наиболее распространенных и простых задач благодаря индексу доступа к массивам.
Начнем с объявления и инициализации int массив, который будет использоваться во всех наших примерах (если мы не указать иное):
Зная, что первый элемент массива связан с значением индекса 0 и что он имеет длина атрибут, который мы можем использовать, то это просто, чтобы выяснить, как мы можем получить эти два элемента:
4. Получить случайное значение от массива
Используя java.util.Random объект, который мы можем легко получить любую ценность от нашего массива:
5. Приложение нового элемента к массиву
Как известно, массивы имеют фиксированный размер значений. Таким образом, мы не можем просто добавить элемент и превысить этот предел.
Для начала нужно будет объявить новый, больший массив и скопировать элементы базового массива на второй.
К счастью, Массивы класс предоставляет удобный метод репликации значений массива в новую структуру разного размера:
По желанию, если ArrayUtils класс доступен в нашем проекте, мы можем использовать его добавить метод (или его addAll альтернатива) для достижения нашей цели в одной строке заявление:
Как мы можем себе представить, этот метод не изменяет исходный массив объект; мы должны присвоить его выход новой переменной.
6. Вставьте значение между двумя значениями
Из-за своего индекса значения символа, вставка элемента в массиве между двумя другими не является тривиальной работой.
Apache счел это типичным сценарием и внедрил метод в своей ArrayUtils класс для упрощения решения:
Мы должны указать индекс, в который мы хотим вставить значение, и выход будет новый массив, содержащий большее количество элементов.
Последним аргументом является переменный аргумент (он же vararg ), таким образом, мы можем вставить любое количество элементов в массиве.
7. Сравните два массива
Несмотря на то, что массивы Объект s и, следовательно, обеспечить равняется метод, они используют реализацию по умолчанию его, опираясь только на равенство ссылок.
Мы можем так или иначе вызвать java.util.Arrays ‘ равняется метод проверки того, содержат ли два объекта массива одинаковые значения:
8. Проверьте, пуст ли массив
Это несложное задание, имея в виду, что мы можем использовать длина атрибут массивов:
Кроме того, у нас также есть нулевой безопасный метод в ArrayUtils класс помощников, которые мы можем использовать:
Эта функция по-прежнему зависит от длины структуры данных, которая считает недействительными и пустыми под массивы как действительные значения тоже, так что нам придется следить за этими случаями края:
9. Как перемешать элементы массива
Для того, чтобы перетасовать элементы в массиве, мы можем использовать ArrayUtil ‘S особенность:
Это пустота метод и работает на фактических значениях массива.
10. Массивы коробки и распаковки
Мы часто сталкиваемся с методами, которые поддерживают только Объект на основе массивов.
Снова ArrayUtils класс помощников пригодится, чтобы получить коробочную версию нашего примитивного массива:
Возможна и обратная операция:
11. Удалите дубликаты из массива
Самый простой способ удаления дубликатов – это преобразование массива в набор реализация.
Как мы знаем, Коллекционая s использовать Generics и, следовательно, не поддерживают примитивные типы.
По этой причине, если мы не обуасвим массивы на основе объектов, как в нашем примере, нам сначала нужно будет обработать наши значения:
Примечание: мы можем использовать другие методы для преобразования между массивом и объектом Set.
12. Как распечатать массив
То же, что и с равняется метод, набор массива toString функция использует реализацию по умолчанию, предоставляемую Объект класс, который не очень полезен.
Помимо несколько иного формата, который они используют, наиболее важным отличием является то, как они относятся к многомерным объектам.
Класс Java Util предоставляет два статических метода, которые мы можем использовать:
С другой стороны, Реализация Apache предлагает единый toString метод, который работает правильно в любом случае:
13. Карта массива к другому типу
Часто полезно применять операции на всех элементов массива, возможно, превращая их в другой тип объекта.
С этой целью, Мы постараемся создать гибкий метод помощников с использованием Generics:
Если мы не используем Java 8 в нашем проекте, мы можем отказаться от Функциональные аргумент, и создать метод для каждого отображения, что мы должны выполнить.
Теперь мы можем повторно использовать наш общий метод для различных операций. Давайте создадим два тестовых случая, чтобы проиллюстрировать это:
Для примитивных типов, мы должны боксировать наши значения в первую очередь.
В качестве альтернативы мы можем обратиться к Потоки Java 8 для выполнения отображения для нас.
Нам нужно превратить массив в Поток Объект s в первую очередь. Мы можем сделать это с Arrays.stream метод.
Например, если мы хотим составить карту наших int значения пользовательского Струнные представительство, мы будем осуществлять это:
14. Значения фильтра в массиве
Фильтрация значений из коллекции является общей задачей, которую нам, возможно, придется выполнять более чем в одном случае.
Это потому, что в то время как мы создаем массив, который будет получать значения, мы не можем быть уверены в его окончательный размер. Поэтому Мы будем полагаться на Поток s подход снова.
Представьте, что мы хотим удалить все нечетные числа из массива:
15. Другие операции общего массива
Есть, конечно, много других операций массива, которые мы, возможно, потребуется выполнить.
Помимо тех, которые показаны в этом учебнике, мы широко рассмотрели другие операции в посвященных должностей:
16. Заключение
Arrays являются одной из основных функций Java, и поэтому очень важно понять, как они работают, и знать, что мы можем и не можем с ними сделать.
В этом учебнике мы узнали, как мы можем обрабатывать операции массива надлежащим образом в общих сценариях.