1. Вставка элемента в середину (или в начало) списка

Если же мы хотим вставить элемент в середину списка, то внутри списка происходит вот что.

Допустим есть список из 11 элементов:

Вставка элемента в середину (или в начало) списка

Мы хотим вставить число 10,000 в список под номером 5, для этого нужно всего лишь выполнить команду:

list.add(5, 10000);

Где list — это переменная типа ArrayList, метод add(int index, тип value) добавляет значение 10000 в позицию 5 в списке. Вот что при этом произойдет в методе add() :

Шаг 1: все элементы массива начиная с 5-го будут сдвинуты (скопированы) на 1 элемент к концу массива:

Вставка элемента в середину (или в начало) списка 1

Обратите внимание: элементы в 5-й и 6-й ячейке массива теперь одинаковые.

Шаг 2: записываем в 5-ю ячейку значение 10,000:

Вставка элемента в середину (или в начало) списка 2

Теперь в списке есть все элементы массива, а в пятой ячейке записано число 10,000. Как мы и хотели.


undefined
13
Задача
Java Syntax Pro, 13 уровень, 5 лекция
Недоступна
Солнечная система
В 3020 году ученые научились выращивать новые планеты, одну из которых отправили в космос на орбиту Солнца. Эта планета находится между Землей и Марсом. Реализуй метод createNewPlanet(String), который должен добавлять переданную планету в список planets сразу после Земли. Посмотри, как изменился по

2. Удаление элемента из списка

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

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

list.remove(3);

Вот что при этом произойдет в методе remove():

Шаг 1: элементы массива начиная с 4-го будут сдвинуты (скопированы) на одну позицию ближе к началу массива:

Удаление элемента из списка 1

Шаг 2: значение переменной size будет уменьшено на 1.

Удаление элемента из списка 2

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

Шаг 3: стирание мусора

Удаление элемента из списка 3


undefined
13
Задача
Java Syntax Pro, 13 уровень, 5 лекция
Недоступна
Прощай, Паскаль
В методе main найди и удали язык программирования Pascal из списка programmingLanguages.

3. Практические примеры работы со списком в Java

Давайте напишем несколько примеров работы со списками:

Занесём в список все четные числа от 1 до 20:

Код Примечания
ArrayList<Integer> list = new ArrayList<Integer>();

for (int i = 1; i <= 20; i++)
   if (i%2 == 0)
      list.add(i);
Создаем объект-список

цикл по всем числам 1 .. 20
если число делится на 2 без остатка,
добавить его в список

А теперь выведем все элементы списка на экран:

Код Примечания
ArrayList<Integer> list = new ArrayList<Integer>();

for (int i = 1; i <= 20; i++)
   if (i%2 == 0)
      list.add(i);

for (int i = 0; i < list.size(); i++)
   System.out.println(list.get(i));
Создаем объект-список
цикл по всем числам 1 .. 20

если число делится на 2 без остатка
добавить его в список

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

Удаление элементов:

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

Код Примечания
ArrayList<Integer> list = new ArrayList<Integer>();

for (int i = 1; i <= 20; i++)
   if (i%2 == 0)
      list.add(i);

for (int i = 0; i < list.size(); i++)
   if (list.get(i)%4 == 0)
   {
      list.remove(i);
      i--;
   }
Создаем объект-список

цикл по всем числам 1 .. 20
если число делится на 2 без остатка,
добавить его в список.

цикл от нуля до размера списка
если элемент списка делится на 4 без остатка:

а) удаляем элемент
б) уменьшаем счетчик i, чтобы на следующем витке цикла опять попасть на тот же элемент

Допустим, вам нужно удалить 3 последних элемента списка.

Как это сделать неправильно:

Код Примечания
ArrayList<Integer> list = new ArrayList<Integer>();

for (int i = 1; i <= 20; i++)
   if (i%2 == 0)
      list.add(i);

int n = list.size();
list.remove(n - 3);
list.remove(n - 2);
list.remove(n - 1);
Создаем объект-список

в списке 10 элементов: 2, 4, 6, ... 20



n = 10
n - 3 = 7 (в списке осталось 9 элементов)
n - 2 = 8 (в списке осталось 8 элементов)
n - 1 = 9 (в списке осталось 7 элементов)

После удаления 7 и 8 элементов, в списке останется всего 8 элементов. Поэтому 9-й элемент удалить не получится — в программе возникнет ошибка.

Как нужно было удалить элементы:

Вариант 1 Вариант 2
int n = list.size();
list.remove(n - 3);
list.remove(n - 3);
list.remove(n - 3);
int n = list.size();
list.remove(n - 1);
list.remove(n - 2);
list.remove(n - 3);

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


undefined
13
Задача
Java Syntax Pro, 13 уровень, 5 лекция
Недоступна
Разбираем пирамиду бокалов
Задача простая: нужно разобрать пирамиду из бокалов, в чем нам поможет метод removeGlassesReverse. Этот метод должен снимать каждый ряд, начиная сверху (с конца списка). Тебе нужно реализовать этот метод. В тестировании тебе поможет метод main. Попробуй запустить программу и посмотреть на вывод.