


1. Вставка элемента в середину (или в начало) списка
Если же мы хотим вставить элемент в середину списка, то внутри списка происходит вот что.
Допустим есть список из 11 элементов:
Мы хотим вставить число 10,000 в список под номером 5, для этого нужно всего лишь выполнить команду:
list.add(5, 10000);
Где list
— это переменная типа ArrayList
, метод add(int index, тип value)
добавляет значение 10000 в позицию 5 в списке. Вот что при этом произойдет в методе add()
:
Шаг 1: все элементы массива начиная с 5-го будут сдвинуты (скопированы) на 1 элемент к концу массива:
Обратите внимание: элементы в 5-й и 6-й ячейке массива теперь одинаковые.
Шаг 2: записываем в 5-ю ячейку значение 10,000:
Теперь в списке есть все элементы массива, а в пятой ячейке записано число 10,000. Как мы и хотели.
2. Удаление элемента из списка
Операция удаления элемента из списка аналогична его вставке, только процесс обратный.
Давайте удалим из списка элемент с индексом 3, для этого нужно выполнить команду:
list.remove(3);
Вот что при этом произойдет в методе remove():
Шаг 1: элементы массива начиная с 4-го будут сдвинуты (скопированы) на одну позицию ближе к началу массива:
Шаг 2: значение переменной size
будет уменьшено на 1.
Обратите внимание: в конце массива, который отмечен серым цветом, есть какие-то значения. Технически это мусор. Его нужно удалить, чтобы не мешать процессу сборки мусора.
Шаг 3: стирание мусора
3. Практические примеры работы со списком в Java
Давайте напишем несколько примеров работы со списками:
Занесём в список все четные числа от 1 до 20:
Код | Примечания |
---|---|
|
Создаем объект-список цикл по всем числам 1 .. 20 если число делится на 2 без остатка,добавить его в список |
А теперь выведем все элементы списка на экран:
Код | Примечания |
---|---|
|
Создаем объект-список цикл по всем числам 1 .. 20 если число делится на 2 без остаткадобавить его в список цикл от нуля до размера списка выводим каждый элемент на экран |
Удаление элементов:
А теперь давайте удалим все элементы, которые делятся на 4. Обратите внимание, что сразу после удаления одного элемента из списка позиции остальных элементов меняются.
Код | Примечания |
---|---|
|
Создаем объект-список цикл по всем числам 1 .. 20 если число делится на 2 без остатка,добавить его в список. цикл от нуля до размера списка если элемент списка делится на 4 без остатка:а) удаляем элемент б) уменьшаем счетчик i , чтобы на следующем витке цикла опять попасть на тот же элемент
|
Допустим, вам нужно удалить 3 последних элемента списка.
Как это сделать неправильно:
Код | Примечания |
---|---|
|
Создаем объект-список в списке 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 |
---|---|
|
|
Элементы нужно или удалять с конца, или просто в одном и том же месте, а после каждого удаления элементы будут сдвигаться на один.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ