Рубрики
Без рубрики

Удаление первого элемента массива

Посмотрите на способы удаления первого элемента массива в Java

Автор оригинала: baeldung.

1. Обзор

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

Кроме того, мы также увидим, как использование структур данных из фреймворка Java Collections Framework делает вещи еще проще.

2. Использование Arrays.copyOfRange()

Прежде всего, удаление элемента массива технически невозможно в Java . Процитировать официальные документы :

“Массив – это объект-контейнер, который содержит фиксированное число значений одного типа. Длина массива устанавливается при его создании. После создания его длина фиксируется.”

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

К счастью, JDK предоставляет удобную статическую вспомогательную функцию, которую мы можем использовать, называемую Arrays.copyOfRange() :

String[] stringArray = {"foo", "bar", "baz"};
String[] modifiedArray = Arrays.copyOfRange(stringArray, 1, stringArray.length);

Обратите внимание, что эта операция имеет стоимость O(n) так как он будет создавать новый массив каждый раз.

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

3. Использование реализации списка

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

Двумя наиболее распространенными реализациями являются ArrayList и LinkedList .

Предположим, что у нас есть следующий список s:

List arrayList = new ArrayList<>();
// populate the ArrayList

List linkedList = new LinkedList<>();
// populate the LinkedList

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

arrayList.remove(0);
linkedList.remove(0);

В случае ArrayList , стоимость удаления составляет O(n) , в то время как LinkedList имеет стоимость O(1) .

Теперь это не означает, что мы должны использовать LinkedList везде по умолчанию, поскольку стоимость извлечения объекта-это наоборот. Стоимость вызова get(i) составляет O(1) в случае ArrayList и O(n) в случае LinkedList .

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

Мы видели, как удалить первый элемент массива в Java. Кроме того, мы рассмотрели, как достичь того же результата с помощью фреймворка Java Collections.

Вы можете найти пример кода на GitHub .