Java collection types comparison notes

Mon, 14 Mar 2022 12:00:00 GMT

My notes about Java collection types comparison.

ArrayList vs. LinkedList

# | ArrayList | LinkedList
Behavior | Implement List interface, so it can act as a list. | Implement List and Dequeue interface, so it can act as a list and queue both.
Storing | Data are stored in a dynamic array. | Data are stored in a doubly-linked list.
Manipulation | Slow because it internally uses an array. If any element is removed from the array, all the bits re shifted in the memory. | Faster because it uses a doubly-linked list, so no bit shifting is required in the memory, only the reference link is changed.
When to use? | ArrayList is better for storing and accessing data. | LinkedList is better for manipulating data.

ArrayList vs. Vector

# | ArrayList | Vector
Synchronization | Non-synchronized, which means that multiple threads can operate on ArrayList at the same time. | Synchronized, which means that only one thread can access the code at a time.
Legacy | ArrayList is not legacy class, it was introduced in JDK 1.2. | Vector is legacy class.
Size | ArrayList increments 50% of its current size if element added exceeds its capacity. | Vector increments 100% of its current size if element added exceeds its capacity.
Speed | ArrayList is fast because it is non-synchronized. | Vector is slow because it is synchronized, i.e., in a multithreading environment, it holds the other threads in runnable or non-runnable state until current thread releases the lock of the object.
Iteration | ArrayList uses Iterator interface to traverse through elements. | Vector can use both Iterator or Enumerator interface to traverse through elements.
When to use? | ArrayList is use mostly in single-thread applications. | Collections.synchronizedList() is preferred to Vector nowadays.

List vs. Set

# | List | Set
Order | Order sequence | Unorder sequence
Duplication | Allowed | Disallowed
Null element | It is possible to store several null elements. | A null element can only be stored once.
Accessing | Elements can be accessed based on their position. | Access to items from a certain position is not permitted.
When to use? | Use it when you want to frequently access the elements by using the index. | Set is used when you want to design a collection of distinct elements.

Set vs. Map

# | Set | Map
Duplication | Duplicate values are not permitted | Unique key, but repeatable values
Traversing | Use Using the keyset() and entryset() methods | Not possible, you must convert Map to Set
Insertion Order | Both Set and Map don’t keep the insertion order, however, some of Set’s classes, such as LinkedHashSet, keep the insertion order. |

HashMap vs. TreeMap

# | HashMap | TreeMap
Implementation | The Java HashMap implementation of the Map interface is based on hash tables. | Java TreeMap is a Map interface implementation based on a Red-Black Tree structure, which is a self balancing binary search tree.
Interface | The Map, Cloneable, and Serializable interfaces are implemented by HashMap. | NavigableMap, Cloneable, and Serializable interfaces are implemented by TreeMap.
Null Keys/ Values | null key: allow only one null key, null value: allow multiple. | null key: not permitted, null value: allow multiple.
Data Types | HashMap does not perform sorting on keys, so it allows for heterogeneous elements. | TreeMap allows homogeneous values as a key because of sorting.
Performance | HashMap is faster than TreeMap because it provides constant time performance that is O(1) for the basic operation like get() and put() | TreeMap is slow in comparison to HaskMap because it provides the performance of O(log(n) for most operation like add(), remove(), and contains().
Order of elements | HashMap does not maintains any order. | TreeMap elements are sorted in natural ordering (ascending).
When to use? | Use HashMap when we does not require key-value pair in sorted order | Use TreeMap when we require key-value pair in ascending order.