"Ето ме."

„Здравей, Ели!“

„Днес ще говорим за една интересна тема. Ще ви разкажа за класа ArrayList .“

„Нов клас? Страхотно! Какво може да направи?“

„Позволете ми да започна с предишната история. Единственото нещо, което програмистите не харесват в масивите е, че не можете да промените размера им. Какво правите, ако трябва да добавите още три елемента към масив, който има само един свободен слот?

"Единственото решение на този проблем е да създадете много големи масиви, за да гарантирате, че имате достатъчно място за всички елементи. Това обаче често означава загуба на памет. Ако масивът обикновено съдържа три елемента, но има дори най-малък шанс че може да се наложи да побере 100 елемента, трябва да създадете масив от 100 елемента."

„И така, Howво измислиха програмистите?“

„Те са написали класа ArrayList , който прави същото като масив, но може да променя размера си.“

"Интересен ход. Как го направиха?"

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

Масив ArrayList
Създайте контейнер за елементи
String[] list = new String[10];
ArrayList<String> list = new ArrayList<String>();
Вземете броя на елементите
int n = list.length;
int n = list.size();
Вземете елемент от масив/колекция
String s = list[3];
String s = list.get(3);
Запишете елемент в масив
list[3] = s;
list.set(3, s);

"И така, защо ArrayList е по-добър? Доколкото мога да кажа, codeът вече е по-дълъг."

"Първо, ArrayList поддържа няколко допълнителни операции, които програмистите трябва да изпълняват през цялото време. Обикновеният масив не поддържа тези операции. Например вмъкване or изтриване на елементи от средата на масив, без да оставят дупки. "

„Второ, възможността за промяна на размера на масива. Когато трябва да добавите още един елемент, но вътрешният масив няма свободни слотове, ето Howво се случва в ArrayList :

a) Създава се друг масив, който е 50% по-голям от текущия вътрешен масив, плюс един елемент.

б) Всички елементи от стария масив се копират в новия.

в) Новият масив се записва като вътрешен масив на обекта ArrayList. Старият масив е обявен за боклук (ние просто спираме да съхраняваме препратка към него)."

Масив ArrayList
Добавете елемент в края на масива
Това действие не се поддържа
list.add(s);
Добавете елемент в средата на масива
Това действие не се поддържа
list.add(15, s);
Добавете елемент в началото на масива
Това действие не се поддържа
list.add(0, s);
Изтриване на елемент от масива
Можем да изтрием елемент с list[3] = null. Но това ще остави „дупка“ в масива.
list.remove(3);

„Как да работим с този ArrayList?“

„Всъщност, точно Howто правим с обикновен масив. Вижте. Нека сравним работата с ArrayList с работата с масив. Да предположим, че трябва да „прочетем 10 низа и да ги покажем на екрана в обратен ред “.“

"Виж това:

С масив
public static void main(String[] args)
{
Reader r = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(r);

// Read strings from the keyboard
String[] list = new String[10];
for (int i = 0; i < list.length; i++)
{
  String s = reader.readLine();
  list[i] = s;
}

// Display the contents of the array
for (int i = 0; i < list.length; i++)
{
  int j = list.length - i - 1;
  System.out.println( list[j] );
}
}
С ArrayList
public static void main(String[] args)
{
Reader r = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(r);

// Read strings from the keyboard
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < 10; i++)
{
  String s = reader.readLine();
  list.add(s);
}

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

Използвах същия цвят, за да маркирам подобни действия във всяка колона."

"От една страна, всичко е различно. От друга - все същото."

„Точно. Освен че не използваме квадратни скоби, когато работим с ArrayList . Вместо това използваме методи get , set и add .“

„Да, толкова събрах. Все пак изглежда почти същото.“