1. ArrayListклас

Днес ще проучим ArrayListкласа. Това е първият от няколко класа, известни като колекции . В Java колекциите са толкова широка и полезна тема, че им е посветен цял мисия на CodeGym.

За да разберете напълно How са структурирани колекциите и всички техни нюанси, трябва първо да научите ООП, интерфейси, наследяване, основите на многонишковостта и много повече.

Така че днес просто ще се запознаем с най-простия вид колекция. Но на достатъчно дълбоко ниво, за да разберете How да го използвате и How работи. А сега се запознайте с ArrayListколекцията .

Предисторията

Ще започна с малко предистория. Програмистите наистина не харесаха един аспект на масивите: фактът, че размерът им не може да се променя. Ами ако трябва да съхраните още три елемента в масив, но има само една празна клетка?

Единственото решение за ограниченията на пространството на масива беше да се създаде много голям масив, за да побере всички елементи, които може да се наложи да съхранявате. Но това обикновено беше загуба на памет. Ако един масив обикновено съдържа два or три елемента, но има дори малка вероятност да трябва да съхрани 100 от тях, тогава е необходимо да се създаде масив с капацитет за съхраняване на 100.

И така, Howво измислиха програмистите? Те написаха ArrayListкласа, който вършеше същата работа като Arrayкласа, но можеше да се променя размера.

Клас ArrayList

Името на ArrayListкласа се образува от две думи: Array + List. Arrayе масив и Listе списък.

Всеки ArrayListобект съдържа обикновен масив от елементи. Когато четете елементи от ArrayList, обектът ги извлича от вътрешния си масив. Когато пишете елементи, той ги записва във вътрешния масив.

Класът ArrayList няма всички недостатъци, които имат масивите. То знае How да:

  • Съхранявайте елементи от определен тип
  • Динамично преоразмеряване на списъка
  • Добавете елементи в края на списъка
  • Вмъкнете елементи в началото or средата на списъка
  • Премахнете елементи от всяко място в списъка

За повече подробности вижте по-долу:


2. Създаване на ArrayListобект

За да създадете ArrayListобект, трябва да напишете code по следния начин:

ArrayList<TypeParameter> name = new ArrayList<TypeParameter>();

Къде ArrayListе типът/класът на колекцията, TypeParameterе типът на елементите, съхранявани в ArrayListколекцията, и nameе името на ArrayList<TypeParameter>променлива.

Променливата nameима общ тип. Състои се от два типа: първо се посочва типът на колекцията, а след това се използват ъглови скоби, за да се посочи типът на елементите, съхранявани в колекцията.

Примери:

Код Описание
ArrayList<Integer> list = new ArrayList<Integer>();
Списък с цели числа
ArrayList<String> list = new ArrayList<String>();
Списък от низове
ArrayList<Double> list = new ArrayList<Double>();
Списък с реални числа

За разлика от масивите, колекциите не могат да съхраняват примитивни типове, а само референтни типове . Така че, ако имате нужда от колекция от ints, използвайте Integerinstead of това класа обвивка.


3. Операции с анArrayList

Първоначално дължината на новосъздадения списък е нула, тъй като съдържа 0 елемента. Ако добавите един елемент към списъка, неговата дължина се увеличава с 1. Ако премахнете добавения елемент, дължината намалява обратно до нула.

Следната table може да ви научи повече за методите на ArrayListкласа:

Методи Описание
void add(Type value)
Добавя предадения елемент към списъка
void add(int index, Type value)
Добавя елемент към определено място в списъка.
Type get(int index)
Връща елемента, чийто индекс еindex
void set(int index, Type value)
Присвоява valueна елемента, чийто индекс еindex
Type remove(int index)
Премахва елемента, чийто индекс е index. Връща премахнатия елемент.
Type remove(Type value)
Премахва елемента, който предавате на метода. Ако има повече от един такъв елемент, първият ще бъде премахнат.
void clear()
Изчиства списъка, т.е. премахва всички елементи от списъка.
boolean contains(Type value)
Проверява дали списъкът съдържа value.
boolean isEmpty()
Проверява дали списъкът е празен or не. С други думи, дали дължината на списъка е нула.
int size()
Връща размера на списъка, т.е. броя на елементите в списъка.
Type[] toArray(Type[] array)
Връща масив, съдържащ елементите на списъка.
Трябва да предадете масива на метода.

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



4. Сравнение на ArrayListиArray

Не мисля, че можем да избегнем сравнението ArrayListи масива.

Има само 4 действия, които можете да извършите с масиви:

  • Създайте масив
  • Вземете елемент по индекс
  • Задаване на елемент по индекс
  • Вземете дължината на масива

Ето тези операции, когато се прилагат към масив и ArrayList:

Масив ArrayList
String[] array = new String[10];
ArrayList<String> list = new  ArrayList<String>();
String s = array[0];
String s = list.get(0);
array[0] = "Bye";
list.set(0, "Bye");
int count = array.length;
int count = list.size();

Нека сравним How ArrayListработи един с това How работи масив. Например, нека изпълним тази задача: "прочетете 10 низа от клавиатурата и ги покажете на екрана в обратен ред"

Използване на масив Използване на ArrayList
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
String[] list = new String[10];

for (int i = 0; i < list.length; i++)
{
    String s = console.nextLine();
    list[i] = s;
}

// Display the contents of the array on the screen
for (int i = 0; i < list.length; i++)
{
    int j = list.length - i - 1;
    System.out.println(list[j]);
}
Scanner console = new Scanner(System.in);

// Read strings from the keyboard
ArrayList<String> list = new ArrayList<String>();

for (int i = 0; i < 10; i++)
{
    String s = console.nextLine();
    list.add(s);
}

// Display the contents of the collection on the screen
for (int i = 0; i < list.size(); i++)
{
    int j = list.size() - i - 1;
    System.out.println(list.get(j));
}

Аналогията е ясна. При масивите всичко е няHow по-кратко и ясно. Но ArrayListсъщо така не е трудно: за да получим елемент, използваме get()метода; за промяна на елемент, set()метод; за да получите дължината на списъка, метода size().

Така че защо програмистите използват ArrayListкласа?

Целият смисъл, разбира се, са всички други методи, които обикновените масиви нямат:

  • Добавете елемент към списъка
  • Добавете елемент в средата на списъка
  • Намерете елемент в списъка
  • Премахване на елемент от списък