Перейти к основному содержимому

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

· 2 мин. чтения

Задача: Сумма двух чисел

Напишите функцию twoSum. Которая получает массив целых чисел nums и целую сумму target, а возвращает индексы двух чисел, сумма которых равна target. Любой набор входных данных имеет ровно одно решение, и вы не можете использовать один и тот же элемент дважды. Ответ можно возвращать в любом порядке...

ANDROMEDA

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 Framework.

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

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

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

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

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

List<String> 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 Framework.

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