Jason. Cała informatyka w jednym miejscu!

Przechodzimy do wyjaśnienia sobie jednej ze struktur danych, z której będziesz często korzystać jeśli chodzi o Javę. "ArrayList" w języku Java jest najbardziej podstawową kolekcją, którą zdecydowana większość z nas poznała jako pierwszą w swoim życiu i czas najwyższy po latach uzupełnić serię artykułów o ten wpis 😯!

"ARRAYLIST" W JĘZYKU JAVA ABSTRAKCYJNYM "DWA W JEDNYM"

Wielu programistów nie bez kozery ochoczo sięga po tę kolekcję (grupę elementów przechowywanych w strukturze danych). "Lista tablicowa" skutecznie łączy plusy statycznej i dynamicznej struktury danych - tablicę oraz listę wiązaną. Przypomnę, że wadą tablic jest niemożność modyfikowania rozmiarów podczas działania programu, a lista musi przejść po wszystkich elementach poczynając od początku celem znalezienia poszukiwanego elementu. Łapiesz 😄?

To "ArrayList" jest takim magicznym "dwa w jednym" 🌟. Możesz odwołać się szybko do dowolnego elementu przy użyciu notacji indeksowej i jednocześnie zmieniać rozmiar struktury poprzez dodawanie i usuwanie elementów 💪. Wiadomo, że to nie będzie w stu procentach oddanie tych pierwotnych struktur danych (myślę tu o wydajności), natomiast w dobie dzisiejszych możliwości sprzętowych na pewno nie będzie to żadnym obciążeniem przy liczbie elementów liczących w wielu tysiącach 🙂.

"ARRAYLIST" W AKCJI

Trzeba pokazać kod źródłowy, bo bez niego nie wystartujemy 😜. Tworzymy sobie instancję na podstawie klasy w taki sam sposób, z niewielkim "dodatkiem" po nazwie typu danych:

ArrayList<Integer> numbers = new ArrayList();

Nawiasy kątowe z typem danych elementów wewnątrz nich! Ponieważ to jest lista zdolna do przechowywania elementów, należy przekazać informację jakiego typu mają być elementy i takiego trzeba się trzymać przez cały cykl jej życia (zatem nie można wstawiać do niej wszystkiego jak leci)! Java któryś raz z rzędu każe zrobić troszeczkę wbrew intuicji i jeżeli to ma reprezentować dowolny z typów prostych, to nie wstawiamy jej "klasycznego" słowa kluczowego:

int

tylko stosujemy odpowiednik jej tzw. klasy opakowującej. Czyli dla "int" będzie to "Integer" itd. Zostawiam tabelkę z odpowiednikami dla każdego typu prostego:

NAZWA KLASA OPAKOWUJĄCA
byte Byte
short Short
int Integer
long Long
float Float
double Double
boolean Boolean

Obecność nawiasów kątowych świadczy o występowaniu typu generycznego - bardzo potężnej broni w składniowym arsenale, który pozwala na "samoprzekstałcanie się" w typ konkretny wskazany przez nas. Więcej informacji zostawiam w załączonym artykule, ponieważ to nie jest miejsce do tłumaczenia tak ważnego zagadnienia ☝.

DODAWANIE ELEMENTÓW

Mamy dwie drogi dodawania elementów do "ArrayList" w języku Java: albo bezpośrednio już w momencie tworzenia obiektu:

ArrayList<Integer> numbers = new ArrayList(Arrays.asList(56, 83, 700, 2));

i po raz kolejny trzeba "wykiwać" Javę wywołując metodę "asList" i dopiero do niej dodać tyle elementów ile chcemy 😏, albo poprzez metodę "add":

numbers.add(70);
numbers.add(Arrays.asList(1973, 81));

podając pojedynczo bądź wiele naraz używając tej samej metody 😁.

USUWANIE ELEMENTÓW

Usuwanie elementów z listy odbywa się równie prosto, co przy dodawaniu - po prostu wywołujemy metodę "remove":

numbers.remove(81);

tylko tu pewna pułapka związana z typem liczby całkowitej!!! Wersja metody oczekująca za parametr "int", będzie "myśleć" że chodzi o indeks, na którym dany element się znajduje. Jeżeli chcemy, aby doszło do usunięcia wskazanej liczby, musimy zastosować rzutowanie na obiekt "Integer":

numbers.remove((Integer)81);

Dobra nowina: program się nie wysypie, jeżeli obiekt nie zostanie znaleziony ⭐. Wysypie się za to wtedy, gdy indeks wyjdzie poza rozmiar listy (poprzednia wersja metody)! Co jeżeli byśmy chcieli usuwać własne obiekty? Wtedy trzeba zadbać o identyfikowanie "równości" obiektów - odwołuję do osobnego artykułu na temat "hashCode".

ITEROWANIE PO ELEMENTACH

Co do "przechodzenia" po wszystkich elementach "ArrayList" w języku Java, mamy pełną swobodę w działaniu, jednak najwygodniej korzystać z dwóch zapisów: pętli "for" i pętli rozszerzonej "foreach". Tak może wyglądać wypisywanie wszystkich elementów jeden po drugim używając pętli "for":

for (int i = 0; i < numbers.size(); ++i) {
	System.out.println(i);
}

Do ograniczania używamy metody "size", która zwróci nam liczbę jako rozmiar. Najlepiej ją stosować w momencie, kiedy nie chcesz iterować po wszystkich elementach bez wyjątku, bo możesz sterować wartością zmiennej iteracyjnej. Kiedy jednak Ci to nie przeszkadza, sięgnij po pętlę "foreach", bo jest bardziej zwięzła:

for (int i : numbers) {
	System.out.println(i);
}

Zobacz, że tutaj kompilator nie będzie od Ciebie wymagał klasy opakowującej dla typu prostego, tylko tu już masz prawo napisać zwyczajnie "int" 👍.

Kolekcja "ArrayList" w języku Java

Kolekcja "ArrayList" w języku Java łączy tablicę i listę wiązaną, ponieważ pozwala na elastyczne modyfikowanie rozmiaru i odwoływanie się do każdego elementu przy użyciu notacji indeksowej.


Tyle, to wszystko co musisz wiedzieć na temat jednej z najczęściej używanych kolekcji w programach pisanych w Javie 😇.

PODOBNE ARTYKUŁY