1 klasaArrayList

Dzisiaj będziemy uczyć się z klasą ArrayList. Jest to pierwsza klasa tzw. kolekcji . Kolekcje w Javie są tak obszerną i użyteczną rzeczą, że jest jej poświęcona cała misja na CodeGym.

Aby w pełni zrozumieć, jak działają kolekcje i jak one działają, musisz najpierw poznać OOP, interfejsy, dziedziczenie, podstawy wielowątkowości i nie tylko.

Dlatego dzisiaj zapoznamy się z najprostszą kolekcją. Ale na wystarczająco głębokim poziomie, aby zrozumieć, jak go używać i jak to działa. Więc poznaj: kolekcjaArrayList .

tło

Zacznę od małego tła. Programistom bardzo nie spodobała się jedna właściwość tablicy - jej rozmiaru nie można zmienić. Co zrobić, jeśli potrzebujesz przechowywać jeszcze trzy elementy w tablicy, ale jest tylko jedno wolne miejsce?

Jedynym rozwiązaniem problemu braku miejsca w tablicy było utworzenie bardzo dużej tablicy, tak aby wszystkie elementy dokładnie się tam mieściły. Ale to często prowadziło do marnowania pamięci. Jeśli zwykle w tablicy były przechowywane dwa lub trzy elementy, ale istniała choćby znikoma szansa, że ​​będzie ich 100, musieliśmy stworzyć tablicę ze 100 elementami.

A co wymyślili programiści? Napisali klasę ArrayList(tablica-lista), która wykonywała to samo zadanie co Array(tablica), ale mogła zmieniać jej rozmiar.

Klasa ArrayList

Sama nazwa ArrayListpochodzi od dwóch słów: Array + List. Arrayjest tablicą i Listjest listą.

Wewnątrz każdego obiektu typu ArrayListprzechowywana jest regularna tablica elementów. Kiedy czytasz elementy z ArrayList, odczytuje je ze swojej wewnętrznej tablicy. Kiedy piszesz, zapisuje je do wewnętrznej tablicy.

W klasie ArrayList brakuje wszystkich wad, jakie mają tablice. On może:

  • Przechowuj elementy określonego typu
  • Dynamicznie zmieniaj rozmiar listy
  • Dodaj elementy na końcu listy
  • Wstaw elementy na początku iw środku listy
  • Usuń elementy z dowolnego miejsca na liście

Więcej szczegółów poniżej:


2. Utwórz obiektArrayList

Aby utworzyć obiekt klasy ArrayList, musisz napisać kod typu:

ArrayList<Тип> Nazwa = new ArrayList<Тип>();

Gdzie ArrayListto typ/klasa kolekcji, Типtyp elementów przechowywanych w kolekcji ArrayListoraz Nazwanazwa zmiennej typu ArrayList<Тип>.

Typ zmiennej Nazwajest złożony - składa się już z dwóch typów: najpierw wskazany jest typ kolekcji, aw nawiasach trójkątnych wskazany jest typ elementów, które ta kolekcja przechowuje.

Przykłady:

Kod Opis
ArrayList<Integer> list = new ArrayList<Integer>();
Lista liczb całkowitych
ArrayList<String> list = new ArrayList<String>();
Lista ciągów
ArrayList<Double> list = new ArrayList<Double>();
Lista liczb rzeczywistych

Kolekcje, w przeciwieństwie do tablic, nie mogą przechowywać typów pierwotnych: tylko typy klas . Więc jeśli potrzebujesz kolekcji typu int, zamiast tego użyj typu opakowania Integer.


3. Operacje zArrayList

Początkowo długość nowo utworzonej listy wynosi zero: zawiera ona 0 elementów. Jeśli do listy zostanie dodany jeden element, jego długość zwiększy się o 1. Jeśli dodany element zostanie usunięty, ponownie zmniejszy się do zera.

Możesz dowiedzieć się więcej o metodach klas ArrayListz tabeli:

Metody Opis
void add(тип value)
Dodaje podany element do listy
void add(int index, тип value)
Dodaje element do określonej lokalizacji na liście.
тип get(int index)
Zwraca element, który znajduje się pod numeremindex
void set(int index, тип value)
Zmienia wartość elementu o numerze indexnavalue
тип remove(int index)
Usuwa element o numerze index. Zwraca usunięty element.
тип remove(тип value)
Usuwa element: musisz przekazać sam element do listy. Jeśli takich elementów jest więcej, pierwszy z nich zostanie usunięty.
void clear()
Czyści listę - usuwa wszystkie elementy z listy.
boolean contains(тип value)
Sprawdza, czy lista zawiera element value.
boolean isEmpty()
Sprawdza, czy lista jest pusta, czy nie. Czy długość listy wynosi zero.
int size()
Zwraca rozmiar listy — liczbę elementów na liście.
тип[] toArray(тип[] array)
Zwraca tablicę zawierającą te same elementy co lista.
Tablica musi zostać przekazana do metody.

Metody te pozwalają na wykonanie niemal wszystkich możliwych operacji na liście: zamiana elementów, dodawanie elementów, usuwanie elementów. Możesz nawet wyczyścić listę za pomocą jednego polecenia lub przekonwertować listę na tablicę.



4. Porównanie ArrayListiArray

Myślę, że nie możemy obejść się bez porównania ArrayListi tablicy.

W rzeczywistości tablica ma tylko 4 akcje:

  • Tworzenie tablicy
  • Pobieranie elementu według numeru
  • Ustawienie elementu według numeru
  • Pobieranie długości tablicy

Oto analogi tych operacji w tablicy iw ArrayList:

szyk lista tablic
String[] array = new String[10];
ArrayList<String> list = new  ArrayList<String>();
String s = array[0];
String s = list.get(0);
array[0] = "Do widzenia";
list.set(0, "Do widzenia");
int count = array.length;
int count = list.size();

Porównajmy pracę ArrayListz pracą tablicy. Dla przykładu rozwiążmy następujący problem: „wprowadź 10 linii z klawiatury i wyświetl je na ekranie w odwrotnej kolejności”

Korzystanie z tablicy (tablica) Korzystanie z ArrayList
Scanner console = new Scanner(System.in);

// ввод строк с клавиатуры
String[] list = new String[10];

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

// вывод содержимого массива на экран
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);

// ввод строк с клавиатуры
ArrayList<String> list = new ArrayList<String>();

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

// вывод содержимого коллекции на экран
for (int i = 0; i < list.size(); i++)
{
    int j = list.size() - i - 1;
    System.out.println(list.get(j));
}

W zasadzie można wyciągnąć wyraźną analogię. A w tablicy wszystko jest nawet jakoś krótsze i wyraźniejsze czy coś. Ale nie jest to ArrayListteż bardzo trudne: pobieranie elementu to metoda get(), zmiana elementu to metoda set(), pobieranie długości listy to metoda size().

Dlaczego więc programiści używają klasy ArrayList?

Oczywiście chodzi o inne metody, których tablica nie ma i nie będzie miała:

  • Dodanie elementu do listy
  • Wstawianie elementu w środku listy
  • Znajdowanie elementu na liście
  • Usuwanie elementu z listy