Co to jest ArrayList?
ArrayList w programowaniu komputerowym to struktura danych, która zachowuje się jak tablica komputerowa, ale także implementuje możliwość dynamicznego zwiększania rozmiaru tablicy w razie potrzeby. W przeciwieństwie do wewnętrznego typu danych tablicy, którego nie można zmienić podczas wykonywania programu, struktura ArrayList może się powiększać i zmniejszać rozmiar tablicy w odpowiedzi na dodawanie lub usuwanie elementów. Ma bardzo korzystny profil wydajności, umożliwiający szybki losowy dostęp do gromadzenia danych. Istnieją jednak dwa przypadki, w których jest on wolniejszy niż niektóre inne struktury danych, a mianowicie dodawanie i usuwanie elementów ze środka tablicy. Większość zorientowanych obiektowo języków programowania ma pewien rodzaj implementacji takiej listy, chociaż czasami nazywane są tablicami dynamicznymi.
Korzystanie z ArrayList zapewnia programowi możliwość natychmiastowego dostępu do obiektów danych o numerze indeksu, zamiast konieczności przechodzenia przez całą sekwencję danych w celu znalezienia adresu, który jest wymagany w przypadku list połączonych. Dzięki możliwości zwiększania rozmiaru tablicy w razie potrzeby jest to bardzo zrównoważone podejście, które uwzględnia zarówno elastyczność, jak i szybkość. Ponadto, gdy elementy są usuwane z takiej listy, rozmiar tablicy jest zmniejszany, co zwalnia miejsce w pamięci.
Jedną zaletą korzystania z ArrayList nad niektórymi innymi strukturami danych jest to, że obiekt otoki nie jest wymagany do przechowywania przechowywanych danych. W przypadku listy połączonej lub tabeli skrótów zwykle potrzebny jest oddzielny obiekt do utrzymania techniki używanej do przechowywania i manipulowania kolekcją. W przypadku ArrayList jedyną potrzebną informacją o obiektach danych jest adres obiektu w pamięci. Oznacza to, że podczas pracy z tego rodzaju listami będzie mniej pamięci narzutów.
Potencjalny problem z użyciem ArrayList może wynikać z systemu wdrażania i zarządzania pamięcią. Większość tablic jest przydzielanych jako kolejne lokalizacje pamięci. Tak więc, aby użyć ArrayList o określonym rozmiarze, przynajmniej tyle pamięci musi być dostępne w nieprzerwanej sekwencji bloków. Tablica dynamiczna może zmieniać się kilka razy, więc może nastąpić fragmentacja pamięci i doprowadzić do niepowodzenia alokacji pamięci, co zatrzyma wykonanie programu.
Wydajność ArrayList jest podobna do korzystania ze standardowej tablicy, chociaż czasy dostępu są nieco wolniejsze, ponieważ tablica jest enkapsulowana w obiekcie. Jednym z przypadków, w których tablica dynamiczna może dramatycznie zwolnić, w zależności od implementacji, jest konieczność zmiany rozmiaru tablicy. Może to obejmować kopiowanie bieżącej tablicy do nowej tablicy, która została przydzielona do nowego pożądanego rozmiaru, powodując tymczasowe pogorszenie wydajności. Ten sam problem może wystąpić podczas dodawania lub usuwania elementu ze środka listy, powodując konieczność przeniesienia wszystkich następujących elementów w nowe miejsce.