ArrayList w programowaniu komputerowym to struktura danych, która zachowuje się jak macierz 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 zwiększać i zmniejszać rozmiar tablicy w odpowiedzi na dodanie lub usunięcie elementów. Charakteryzuje się bardzo korzystnym profilem wydajności, pozwalającym na szybki, losowy dostęp do zbioru danych. Istnieją jednak dwa przypadki, w których jest wolniejszy niż niektóre inne struktury danych, a mianowicie dodawanie i usuwanie elementów ze środka tablicy. Większość języków programowania obiektowego ma jakiś rodzaj implementacji takiej listy, chociaż czasami są one nazywane tablicami dynamicznymi.
Korzystanie z ArrayList zapewnia programowi możliwość natychmiastowego dostępu do obiektów danych z numerem indeksu, zamiast konieczności przechodzenia przez całą sekwencję danych w celu znalezienia adresu, co jest wymagane w przypadku połączonych list. Dzięki możliwości zwiększania rozmiaru macierzy w razie potrzeby jest to bardzo wyważone podejście, które uwzględnia zarówno elastyczność, jak i szybkość. Dodatkowo, gdy elementy są usuwane z takiej listy, rozmiar tablicy jest zmniejszony, zwalniając miejsce w pamięci.
Jedną z zalet używania ArrayList w porównaniu z innymi strukturami danych jest to, że obiekt opakowania nie musi zawierać przechowywanych danych. W przypadku połączonej listy lub tablicy mieszającej zwykle potrzebny jest oddzielny obiekt, aby zachować technikę używaną do przechowywania kolekcji i manipulowania nią. W przypadku ArrayList jedyną potrzebną informacją o obiektach danych jest adres obiektu w pamięci. Oznacza to, że podczas pracy z tego typu listami będzie mniejsze zużycie pamięci.
Potencjalny problem z używaniem ArrayList może wynikać z implementacji i systemu zarządzania pamięcią. Większość tablic jest alokowana 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ć swój rozmiar kilka razy, więc może wystąpić fragmentacja pamięci i doprowadzić do niepowodzenia alokacji pamięci, zatrzymując wykonywanie programu.
Wydajność ArrayList jest podobna do wydajności przy użyciu standardowej tablicy, chociaż czasy dostępu są nieco wolniejsze, ponieważ tablica jest hermetyzowana w obiekcie. Jednym z przypadków, w których tablica dynamiczna może drastycznie zwolnić, w zależności od implementacji, jest konieczność zmiany rozmiaru tablicy. Może to obejmować skopiowanie 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, że wszystkie kolejne elementy muszą zostać przeniesione do nowej lokalizacji.