Как удалить элемент массива java

Как удалить элементы массива в Java

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

Когда мы создаем массив в Java, мы указываем его тип данных и размер. Это используется JVM для выделения необходимой памяти для элементов массива. Нет никаких специальных методов для удаления элементов из массива.

1. Удаление элемента из массива с помощью цикла for

Этот метод требует создания нового массива. Мы можем использовать цикл for для заполнения нового массива без элемента, который мы хотим удалить.

Код удаляет элемент с индексом 3. Этот метод просто копирует все элементы, кроме элемента с индексом 3, в новый массив.

2. Удаление элемента массива по его значению

В отличие от предыдущего случая, этот код удалит элемент на основе его значения. Это не будет работать с дубликатами, так как размер массива после удаления должен быть известен.

3. Удаление элемента по его значению, если массив содержит дубликаты

Выполнение удаления на основе значения в случае дубликатов требует использования ArrayList. Поскольку ArrayList не требует, чтобы размер был указан заранее, он позволяет нам динамически расширяться.

4. Перемещение элементов в одном массиве

Этот метод включает в себя перемещение элементов в одном и том же массиве. Смещение элементов заменяет элемент, подлежащий удалению, элементом следующего индекса.

Переменная Count указывает количество удаленных элементов. Эта переменная необходима для отслеживания индекса, до которого массив должен быть напечатан. Этот метод также устраняет дубликаты.

5. Удаление элементов из списка ArrayList

ArrayList поддерживается массивами. Удаление элемента в списке массивов происходит прямолинейно. Для этого требуется один простой вызов встроенной функции.

Вызов функции remove(i) удаляет элемент с индексом i. Удаление в списках массивов относительно проще по сравнению с массивами.

Вывод

Мы видели несколько примеров удаления элементов в массиве с использованием различных методов. Разница между удалением элемента в массиве и списком массивов явно очевидна. Если удаление должно выполняться снова и снова, то ArrayList следует использовать для использования встроенных функций. То же самое относится и к добавлению элементов в массив. ArrayList благодаря своей динамической природе обеспечивает более простые и менее громоздкие способы изменения массива.

Источник

Удалить элемент из массива в Java

В этом уроке мы продемонстрируем примеры того, как удалить элемент из массива в Java с помощью двух массивов: ArrayUtils.remove (), цикла for и System.arraycopy().

Вступление

В этом уроке будут рассмотрены некоторые общие методы удаления элементов из массивов Java. Манипулирование элементами массива является чрезвычайно распространенной задачей, поскольку дискуссии об этом можно найти на многих форумах, особенно на StackOverflow.

Вот список приемов и методов, которые мы рассмотрим в этой статье:

Краткий брифинг по массивам

Массивы-это структуры данных, распространенные во многих языках программирования. Каждый массив хранится в одном блоке памяти и обеспечивает последовательное хранение и простое управление элементами:

Элементы последовательно сохраняются один за другим. Когда кто-то хочет получить доступ к элементу с определенным индексом, арифметика указателей (которая является механизмом под капотом) позволяет быстро и эффективно получить любой конкретный элемент.

Что затрудняет удаление элемента массива, так это тот факт, что все элементы последовательно хранятся в одном блоке памяти. Из-за характера размещения памяти массива просто невозможно удалить элемент напрямую.

Вместо этого, чтобы “удалить” какой-либо элемент, все последующие элементы должны быть сдвинуты назад на одно место. Это создаст иллюзию того, что определенный элемент был удален.

Использование Двух Массивов

Самый простой чистый Java – способ сделать это-создать новый массив, на один элемент короче исходного, и скопировать в него все элементы, кроме того, который мы хотели бы удалить:

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

Массив copy теперь состоит из:

ArrayUtils.удалить()

Прежде чем работать с Apache Commons, мы захотим добавить его в наш проект:

Использовать этот метод действительно просто. Мы просто предоставляем ему массив, из которого мы хотели бы удалить элемент, и его индекс:

Затем он возвращает новый массив, который хранится в переменной array :

Использование цикла for

Скажем, мы хотим удалить третий элемент:

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

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

Если бы мы пошли и напечатали измененный массив, это был бы результат:

Сокращенный способ сделать то же самое, что и раньше, но в одной строке кода, – это метод System.arraycopy() :

Метод принимает исходный массив и позицию , с которой следует начать копирование. Он также принимает целевой массив и позицию , в которую нужно начать копирование. Последним аргументом является количество элементов, которые необходимо скопировать из исходного массива.

arraycopy обычно используется для копирования содержимого из некоторого исходного массива в некоторый целевой массив. Хотя мы также можем скопировать массив или его часть в себя. Это позволяет нам сдвинуть часть его влево, как в прошлый раз:

Чтобы удалить элемент, нам нужно написать только одну строку кода:

Если бы мы напечатали результат, мы все равно увидели бы элемент 100 дублируется по той же причине, что и в предыдущем разделе. В следующем разделе мы покажем, как полностью устранить эту проблему.

Вывод

В этом уроке мы показали несколько способов удаления элементов массива. Некоторые из них быстры и грязны, в то время как некоторые требуют дополнительных затрат, таких как использование дополнительных библиотек. Всегда лучше подумать об этих вещах заранее, чтобы получить представление о том, какой подход подходит для любой конкретной ситуации.

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

Источник

Удаление элемента из массива в Java

Удаление элемента из массива в Java не изменяет размер массива. Узнайте, почему.

1. Обзор

2. Maven

3. Удаление элемента

Прежде чем мы начнем, давайте посмотрим, что происходит, когда мы удаляем элемент из массива без использования класса ArrayUtils из библиотеки Apache Commons Lang.

Учитывая массив ниже, давайте удалим элемент в index 2 :

Теперь давайте рассмотрим представление массива при удалении элемента с помощью метода remove из класса ArrayUtils из Apache Commons Lang:

Как мы видим, размер массива здесь корректируется до 5 после удаления элемента. Метод remove создает совершенно новый массив и копирует все значения, кроме удаляемого значения.

Класс ArrayUtils предоставляет два способа удаления элемента из массива. Давайте посмотрим на это дальше.

4. Использование индекса в качестве входных данных

Первый способ, которым мы можем удалить элемент, – это его индекс с помощью ArrayUtils#remove :

5. Использование элемента в качестве входных данных

Или, скажем, мы не знаем индекс того, что мы удаляем. В этом случае мы можем предоставить элемент для удаления с помощью ArrayUtils#removeElement :

Иногда мы хотели бы удалить все вхождения данного элемента. Мы можем сделать это с помощью ArrayUtils#removeAllOccurences :

6. Заключение

Источник

Удаление элемента из массива (Java)

Есть ли какой-нибудь быстрый (и красивый) способ удалить элемент из массива в Java?

ОТВЕТЫ

Ответ 1

Вы можете использовать commons lang ArrayUtils.

Ответ 2

Ваш вопрос не очень ясен. Из вашего собственного ответа я могу лучше сказать, что вы пытаетесь сделать:

Примечание. Это не проверено. Проверка ошибок оставлена ​​как упражнение для читателя (я бы выбрал IllegalArgumentException, если ввод или deleteMe равен NULL, пустой список для ввода нулевого списка не имеет смысла. Удаление нулей Строки из массива могут иметь смысл, оставим это как упражнение тоже, в настоящее время он будет бросать NPE, когда он пытается называть equals на deleteMe, если deleteMe имеет значение null.)

Выбор, который я сделал здесь:

Я использовал LinkedList. Итерация должна быть такой же быстрой, и вы избегаете любых изменений или выделяете слишком большой список, если в итоге вы удалите множество элементов. Вы можете использовать ArrayList и установить начальный размер на длину ввода. Вероятно, это не будет иметь большого значения.

Ответ 3

Изменить в ответ на комментарий:

Чтобы выделить коллекцию (создает новый массив), затем удалить элемент (который коллекция будет делать с помощью arraycopy), а затем вызвать toArray для него (создает ВТОРОЙ новый массив) для каждого удаления, что приводит нас к точке, где это не является проблемой оптимизации, это преступно плохое программирование.

Предположим, у вас есть массив, занимающий, скажем, 100 МБ ОЗУ. Теперь вы хотите перебрать его и удалить 20 элементов.

Я знаю, что вы ПРИНИМАЕТЕ, что он не будет таким большим или что, если вы удаляете столько раз за раз, вы закодируете его по-другому, но я исправил очень много кода, где кто-то делал подобные предположения.

Ответ 4

Вы не можете удалить элемент из базового массива Java. Взгляните на различные коллекции и ArrayList.

Ответ 5

Хорошим решением будет использовать List вместо массива, в первую очередь.

Ответ 6

Я думаю, что вопрос требует разрешения без использования API коллекций. Один использует массивы либо для деталей низкого уровня, где важна производительность, либо для слабосвязанной интеграции SOA. В более поздних версиях, это нормально, чтобы преобразовать их в Коллекции и передать их бизнес-логике как таковой.

Для низкоуровневого уровня производительности он обычно уже запутывается быстрым и грязным императивным сочетанием состояний для циклов и т.д. В этом случае преобразование между коллекциями и массивами является громоздким, нечитаемым и даже ресурсоемкий.

Кстати, TopCoder, кто-нибудь? Всегда эти параметры массива! Поэтому будьте готовы быть в состоянии справиться с ними, когда на арене.

Ниже моя интерпретация проблемы и решение. Он отличается по функциональности от тех, которые заданы Bill K и jelovirt. Кроме того, он грамотно обрабатывает случай, когда элемент не находится в массиве.

Надеюсь, что это поможет!

Ответ 7

Вы можете использовать ArrayUtils API, чтобы удалить его «красивым способом». Он реализует множество операций (удалить, найти, добавить, содержит и т.д.) На массивы.
Взглянуть. Это упростило мою жизнь.

Ответ 8

Для Билла К и Дадинна требуются дополнительные предварительные условия

Ответ 9

Вы не можете изменить длину массива, но вы можете изменить значения индекса, скопировав новые значения и сохранив их под существующим индексным номером. 1 = Майк, 2 = Джефф //10 = Джордж 11 переходит на 1 перезаписывая Майк.

Ответ 10

в порядке, спасибо много теперь я использую sth, как это:

Ответ 11

Надеюсь, вы используете коллекцию java collection/java commons!

С помощью java.util.ArrayList вы можете сделать следующее:

Ответ 12

Copy ваш исходный массив в другой массив без элемента, который нужно удалить.

Ответ 13

Смените элемент, который нужно удалить, с последним элементом, если изменение размера массива не представляет интереса.

Источник

Удаление элемента из массива (Java)

Есть ли быстрый (и красивый) способ удалить элемент из массива в Java?

Вы могли бы использовать ArrayUtils Commons lang.

Ваш вопрос не очень понятен. По вашему собственному ответу я могу лучше сказать, что вы пытаетесь сделать:

NB: это не проверено. Проверка ошибок оставлена ​​читателю как упражнение (я бы выбросил IllegalArgumentException, если либо input, либо deleteMe имеют значение null; пустой список при вводе нулевого списка не имеет смысла. Удаление нулевых строк из массива может иметь смысл, но я Я также оставлю это как упражнение: в настоящее время он бросит NPE, когда попытается вызвать equals на deleteMe, если deleteMe имеет значение null.)

Выборы, которые я сделал здесь:

Я использовал LinkedList. Итерация должна быть такой же быстрой, и вы избегаете каких-либо изменений размера или выделения слишком большого списка, если в итоге вы удалили много элементов. Вы можете использовать ArrayList и установить начальный размер на длину ввода. Это, вероятно, не будет иметь большого значения.

Отредактируйте в ответ на комментарий (tl; dr):

Чтобы выделить коллекцию (создает новый массив), затем удалить элемент (который коллекция будет делать с помощью arraycopy), а затем вызвать toArray для него (создает ВТОРОЙ новый массив) для каждого удаления, что приводит нас к тому, что это не является проблемой оптимизации Это преступно плохое программирование.

Предположим, у вас есть массив, занимающий, скажем, 100 МБ ОЗУ. Теперь вы хотите перебрать его и удалить 20 элементов.

Я знаю, что ВЫ ПРИНИМАЕТЕ, что оно не будет таким большим или что, если вы удаляете столько раз за раз, вы закодируете его по-другому, но я исправил очень много кода, где кто-то делал подобные предположения.

Источник

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *