Class ArrayList represents a dynamic array. It can grow as necessary to accommodate new elements. The array is actually implemented as a list of references to objects. Whenever an element needs to be created, a reference to a new object is made available. This is possible because of the fact that ArrayList is implemented as a dynamically resizable list. ArrayList inherits most of its methods and fields from AbstractList. ArrayList is faster than an array since it doesn't have to create new objects. Mutating methods that change the size of the array such as add, set and remove, are called destructive methods since they permanently change the size of the array.