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. Как мы и хотели.


12
Задача
Модуль 1. Java Syntax,  20 уровень3 лекция
Недоступна
Проглатываем исключение
Перехвати исключение в методе main, чтобы программа компилировалась. При возникновении исключения нужно вывести на экран строку errorMessage.

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

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

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

list.remove(3);

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

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

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

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

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

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

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

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


12
Задача
Модуль 1. Java Syntax,  20 уровень3 лекция
Недоступна
Пропускаем сквозь себя
Сделай так, чтобы программа компилировалась, не используя try-catch.

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);

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


1
Задача
Модуль 1. Java Syntax,  26 уровень2 лекция
Недоступна
Оборачивание исключений
В методе copyFile перехвати исключения, которые бросают методы readFile и writeFile. Перехваченные исключения оберни в RuntimeException и пробрось дальше.