Quick reference for Java Collections — ArrayList, LinkedList, HashMap, TreeMap, HashSet, TreeSet, Queue and more. When to use which.
| Class | Ordered | Duplicates | Null | Thread-safe | Best for |
|---|---|---|---|---|---|
| ArrayList | ✅ Yes | ✅ Yes | ✅ Yes | ❌ No | Random access, iteration |
| LinkedList | ✅ Yes | ✅ Yes | ✅ Yes | ❌ No | Frequent insert/delete at ends |
| Vector | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | Legacy — use ArrayList instead |
| CopyOnWriteArrayList | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes | Read-heavy concurrent access |
| Class | Ordered | Null Key | Thread-safe | Best for |
|---|---|---|---|---|
| HashMap | ❌ No | ✅ Yes (1) | ❌ No | General purpose key-value |
| LinkedHashMap | ✅ Insertion | ✅ Yes (1) | ❌ No | Preserve insertion order |
| TreeMap | ✅ Sorted | ❌ No | ❌ No | Sorted keys, range queries |
| Hashtable | ❌ No | ❌ No | ✅ Yes | Legacy — use ConcurrentHashMap |
| ConcurrentHashMap | ❌ No | ❌ No | ✅ Yes | Concurrent read/write |
| EnumMap | ✅ Enum order | ❌ No | ❌ No | Enum keys — very fast |
| Class | Ordered | Null | Thread-safe | Best for |
|---|---|---|---|---|
| HashSet | ❌ No | ✅ Yes (1) | ❌ No | Fast lookup, no duplicates |
| LinkedHashSet | ✅ Insertion | ✅ Yes (1) | ❌ No | Unique elements, preserve order |
| TreeSet | ✅ Sorted | ❌ No | ❌ No | Sorted unique elements |
| EnumSet | ✅ Enum order | ❌ No | ❌ No | Enum values — extremely fast |
| Class | FIFO/LIFO | Null | Thread-safe | Best for |
|---|---|---|---|---|
| ArrayDeque | Both | ❌ No | ❌ No | Stack or queue — faster than Stack/LinkedList |
| LinkedList | Both | ✅ Yes | ❌ No | Queue with null elements |
| PriorityQueue | Priority | ❌ No | ❌ No | Min/max heap, task scheduling |
| ArrayBlockingQueue | FIFO | ❌ No | ✅ Yes | Bounded producer-consumer |
| LinkedBlockingQueue | FIFO | ❌ No | ✅ Yes | Unbounded producer-consumer |
| Operation | ArrayList | LinkedList | HashMap | TreeMap |
|---|---|---|---|---|
| get(i) | O(1) | O(n) | O(1) avg | O(log n) |
| add(e) | O(1) amort | O(1) | O(1) avg | O(log n) |
| remove(i) | O(n) | O(n) | O(1) avg | O(log n) |
| contains(e) | O(n) | O(n) | O(1) avg | O(log n) |
| size() | O(1) | O(1) | O(1) | O(1) |
| Need | Use | Avoid |
|---|---|---|
| Fast index access, unknown size | ArrayList | LinkedList — O(n) index access |
| Frequent insert/delete at head/middle | LinkedList (as Deque) | ArrayList — O(n) shifts |
| Stack (LIFO) | Deque (ArrayDeque) | Stack class — legacy, synchronized |
| Queue (FIFO) | ArrayDeque or LinkedList | PriorityQueue — orders by priority, not insertion |
| Priority-based processing | PriorityQueue (min-heap) | LinkedList — no ordering |
| Fast key lookup, no order needed | HashMap | TreeMap — O(log n) vs O(1) |
| Sorted key iteration | TreeMap | HashMap — no guaranteed order |
| Insertion-order iteration | LinkedHashMap | HashMap — random order, TreeMap — sort order |
| Unique elements, fast lookup | HashSet | List + contains() — O(n) per check |
| Sorted unique elements | TreeSet | HashSet — no order |
| Thread-safe map | ConcurrentHashMap | Hashtable — fully synchronized, slow |
| Frequent reads, rare writes (thread-safe list) | CopyOnWriteArrayList | Collections.synchronizedList — coarse lock |