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

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

1. обзор

В этом руководствеwe’ll look at how to remove the first element of an array.

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

2. ИспользуяArrays.copyOfRange()

Прежде всего,removing an element of an array isn’t technically possible in Java. Процитируемofficial docs:

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

Это означаетas long as we’re working with an array directly, all we can do is create a new array of smaller size, which then doesn’t contain the first element.

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

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

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

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

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

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

Две наиболее распространенные реализации - этоArrayList иLinkedList.

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

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. Заключение

We’ve seen how to remove the first element of an array in Java. Кроме того, мы рассмотрели, как достичь того же результата с помощью Java Collections Framework.

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