1. Добавяне на елемент в средата (or в началото) на списък

Ако искаме да вмъкнем елемент в средата на списъка, ето Howво се случва вътре в списъка.

Да предположим, че имаме списък от 11 елемента:

Добавяне на елемент в средата (or в началото) на списък

Искаме да вмъкнем числото 10 000 в списъка при индекс 5. За да направим това, просто трябва да изпълним:

list.add(5, 10000);

Къде listе ArrayListпроменлива. Методът add(int index, type value)добавя стойност 10000 на позиция 5 в списъка. Ето Howво се случва в add()метода:

Стъпка 1: Всички елементи на масива, започвайки от 5-та позиция, ще бъдат изместени (копирани) с 1 елемент към края на масива:

Добавяне на елемент в средата (or в началото) на списък 1

Обърнете внимание, че елементите в 5-та и 6-та клетка на масива вече са еднакви.

Стъпка 2: Напишете стойността 10 000 в 5-та клетка:

Добавяне на елемент в средата (or в началото) на списък 2

Сега списъкът съдържа всички елементи на масива, а петата клетка съдържа числото 10 000. Точно това, което искахме.



2. Премахване на елемент от списък

Премахването на елемент от списък е подобно на вмъкването му, но процесът е обратен.

Нека премахнем третия елемент от списък. За да направим това, трябва да изпълним:

list.remove(3);

Ето Howво се случва в метода remove():

Стъпка 1: Елементите на масива, започвайки от 4-та позиция, ще бъдат изместени (копирани) с 1 елемент към началото на масива:

Премахване на елемент от списък

Стъпка 2: Стойността на sizeпроменливата ще бъде намалена с 1.

Премахване на елемент от списък 2

Моля, обърнете внимание, че в края на масива има някои стойности, оцветени в сиво. Технически това са боклуци. Те трябва да бъдат премахнати, за да не пречат на сметосъбирането .

Стъпка 3: Почистване на боклука

Премахване на елемент от списък 3



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без остатък:

a) премахнете елементът
b) намалява iброяча, така че да получим същия индекс при следващата итерация на цикъла

Да приемем, че трябва да премахнете последните 3 елемента от списък.

Ето How да направите това неправилно:

Код Бележки
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);

Елементите трябва да бъдат премахнати or от края, or от друго последователно място, тъй като елементите се изместват с един след всяка операция по премахване.