ArrayList Class Basic Concepts

ArrayList Concepts

  1. ArrayList is a resizable-array implementation of the List interface.

  2. In the newer code, ArrayList is used along with generics.

  3. The ArrayList class is similar to a Vector as both can grow in size as needed.

    1. But unlike Vector, ArrayList is not synchronized.

    2. ArrayList is always preferred over a Vector.

    3. There are many ways through which we can make an ArrayList thread safe like Collections.synchronizedList(theArrayList) or we can use a use a CopyOnWriteArrayList

  4. iterators returned by iterator and listIterator methods of LinkedList are fail-fast:

    • fails quickly and cleanly, rather than risking undetermined behaviour in the future.

    • if the list is structurally modified at any time after the iterator is created, except through the Iterator's own remove or add methods, the iterator will throw a ConcurrentModificationException.

    • Fail-fast iterators throw ConcurrentModificationException on a best-effort basis and cannot be guaranted; so we should not depend on it while coding.

  5. If simultaneous overwrite occurs in an ArrayList, a ConcurrentModificationException exception is thrown.

    • Synchronizing a class when not required can affect the performance.

  6. The list in an ArrayList is internally stored using arrays. The capacity attribute of an ArrayList is the size of the array used to store the elements in the list. It is always at least as large as the list size. As elements are added to an ArrayList, its capacity grows automatically. Internally a new array may be created and elements are copied from the old array to the new array. The details of the growth policy are however not specified in the specification. Anyway, when we spread out the time taken over the total number of operations, it will not be significant. 

ArrayList vs. Arrays

ArrayList can be considered as dynamic arrays and had following advantages over arrays:

  1. ArrayList can dynamically resize based on the number of elements in the list, but arrays have a fixed size.

  2. It reduces the memory footprint. In case of arrays, we need to allocate memory upfront as we cannot change later. So extra memory is allocated even if we don't use it.

However, if you are sure about the number of elements or if primitive data types are the elements we can use arrays instead. 


ArrayList API Summary

  1. ArrayList is part of the collections framework.

  2. ArrayList is implements List<E> interface.

  3. ArrayList implements all optional list operations, and permits all elements, including null.

  4. In addition to implementing the List interface, this class provides methods to manipulate the size of the internal array that is used to store the list. 

  5. ArrayList also implements following interfaces: Serializable, Cloneable, Iterable<E>, Collection<E>, RandomAccess.

  6. ArrayList extends from following abstract classes: AbstractList<E> and AbstractList<E>.

  7. ArrayList has following subclasses: AttributeList, RoleList, RoleUnresolvedList


doctor.chepete's picture

when constructing an ArrayList, we can use the diamond syntax. instead of

ArrayList<String> list = new ArrayList<String>();

ArrayList<String> list = new ArrayList<String>(20);

ArrayList<String> list = new ArrayList<String>(myCollection);

we can use 

ArrayList<String> list = new ArrayList<>();

ArrayList<String> list = new ArrayList<>(20);

ArrayList<String> list = new ArrayList<>(myCollection);

this is called the diamond syntax probably because of the <>(), note that the data type is ommitted on the right of the equal sign.

Was it useful?

Quick Notes Finder Tags

Activities (1) advanced java (1) agile (3) App Servers (6) archived notes (2) Arrays (1) Best Practices (12) Best Practices (Design) (3) Best Practices (Java) (7) Best Practices (Java EE) (1) BigData (3) Chars & Encodings (6) coding problems (2) Collections (15) contests (3) Core Java (All) (55) course plan (2) Database (12) Design patterns (8) dev tools (3) downloads (2) eclipse (9) Essentials (1) examples (14) Exception (1) Exceptions (4) Exercise (1) exercises (6) Getting Started (18) Groovy (2) hadoop (4) hibernate (77) hibernate interview questions (6) History (1) Hot book (5) http monitoring (2) Inheritance (4) intellij (1) java 8 notes (4) Java 9 (1) Java Concepts (7) Java Core (9) java ee exercises (1) java ee interview questions (2) Java Elements (16) Java Environment (1) Java Features (4) java interview points (4) java interview questions (4) javajee initiatives (1) javajee thoughts (3) Java Performance (6) Java Programmer 1 (11) Java Programmer 2 (7) Javascript Frameworks (1) Java SE Professional (1) JPA 1 - Module (6) JPA 1 - Modules (1) JSP (1) Legacy Java (1) linked list (3) maven (1) Multithreading (16) NFR (1) No SQL (1) Object Oriented (9) OCPJP (4) OCPWCD (1) OOAD (3) Operators (4) Overloading (2) Overriding (2) Overviews (1) policies (1) programming (1) Quartz Scheduler (1) Quizzes (17) RabbitMQ (1) references (2) restful web service (3) Searching (1) security (10) Servlets (8) Servlets and JSP (31) Site Usage Guidelines (1) Sorting (1) source code management (1) spring (4) spring boot (3) Spring Examples (1) Spring Features (1) spring jpa (1) Stack (1) Streams & IO (3) Strings (11) SW Developer Tools (2) testing (1) troubleshooting (1) user interface (1) vxml (8) web services (1) Web Technologies (1) Web Technology Books (1) youtube (1)