Java’s Collections provides a set of interfaces and classes to manage and manipulate groups of objects. Below is a comprehensive list of the key interfaces and their common implementing classes.
Core Interfaces
These define the fundamental structure of collections.
- Collection (Root Interface)
- Description: The base interface for all collections, providing methods like add(), remove(), size(), and iterator().
- Sub-Interfaces: List, Set, Queue.
- List
- Description: An ordered collection that allows duplicates and positional access (via indices).
- Classes:
- ArrayList: Dynamic array-based list; fast random access (O(1)), slow middle insertions (O(n)).
- LinkedList: Doubly-linked list; fast insertions/deletions (O(1)), slow random access (O(n)); also implements Deque.
- Vector: Synchronized dynamic array (legacy, thread-safe ArrayList).
- Stack: Subclass of Vector, implements LIFO (Last-In-First-Out) stack (legacy; prefer Deque).
- Set
- Description: A collection that does not allow duplicates; no order guarantee unless specified.
- Classes:
- HashSet: Hash table-based set; unordered, fast operations (O(1)), allows one null.
- LinkedHashSet: Hash table + linked list; maintains insertion order, slightly slower than HashSet.
- TreeSet: Red-black tree-based set; sorted order (natural or custom), O(log n) operations, no null.
- Queue
- Description: A collection designed for holding elements prior to processing, typically FIFO (First-In-First-Out).
- Sub-Interface: Deque (Double-Ended Queue).
- Classes:
- PriorityQueue: Heap-based queue; elements ordered by natural order or comparator, O(log n) insertion.
- ArrayDeque: Resizable array-based deque; fast O(1) operations at both ends; implements Deque.
- Deque (Double-Ended Queue)
- Description: Extends Queue to allow adding/removing elements from both ends.
- Classes:
- ArrayDeque: See above.
- LinkedList: Also implements Deque.
- Map
- Description: Not a Collection subtype; stores key-value pairs, keys are unique.
- Classes:
- HashMap: Hash table-based map; unordered, fast O(1) operations, allows one null key.
- LinkedHashMap: Hash table + linked list; maintains insertion order.
- TreeMap: Red-black tree-based map; sorted by keys, O(log n) operations, no null keys.
- Hashtable: Synchronized hash table (legacy, thread-safe HashMap).
Additional Interfaces
These extend or complement the core interfaces.
- SortedSet (extends Set)
- Description: A Set with elements in sorted order.
- Classes:
- TreeSet: See above.
- NavigableSet (extends SortedSet)
- Description: Adds navigation methods (e.g., lower(), higher(), ceiling()).
- Classes:
- TreeSet: Implements this interface.
- SortedMap (extends Map)
- Description: A Map with keys in sorted order.
- Classes:
- TreeMap: See above.
- NavigableMap (extends SortedMap)
- Description: Adds navigation methods for keys (e.g., floorKey(), ceilingKey()).
- Classes:
- TreeMap: Implements this interface.
- Iterator
- Description: Interface for iterating over collections (hasNext(), next(), remove()).
- Used By: All Collection subtypes.
- ListIterator (extends Iterator)
- Description: Bidirectional iterator for List (adds previous(), hasPrevious()).
- Used By: List implementations.
Concurrent Collections (Thread-Safe)
From java.util.concurrent, designed for multi-threaded environments.
- ConcurrentHashMap
- Description: Thread-safe HashMap with fine-grained locking; allows concurrent reads/writes.
- CopyOnWriteArrayList
- Description: Thread-safe ArrayList; creates a new copy on write operations, good for read-heavy scenarios.
- CopyOnWriteArraySet
- Description: Thread-safe Set backed by CopyOnWriteArrayList.
- BlockingQueue (extends Queue)
- Description: Queue with blocking operations for thread synchronization.
- Classes:
- ArrayBlockingQueue: Fixed-size, array-based blocking queue.
- LinkedBlockingQueue: Optionally bounded, linked-list-based blocking queue.
- PriorityBlockingQueue: Unbounded, priority-based blocking queue.
- BlockingDeque (extends Deque)
- Description: Double-ended blocking queue.
- Classes:
- LinkedBlockingDeque: Doubly-linked blocking deque.
Legacy Collections (Pre-Java 1.2)
These are older, synchronized implementations; use modern alternatives unless required.
- Vector
- Description: See List section; replaced by ArrayList in most cases.
- Stack
- Description: See List section; prefer ArrayDeque for stack operations.
- Hashtable
- Description: See Map section; replaced by HashMap or ConcurrentHashMap.
- Dictionary
- Description: Abstract class (predecessor to Map); rarely used today.
Summary Table
Interface | Key Classes | Purpose |
---|---|---|
Collection | (Base interface) | General collection methods |
List | ArrayList, LinkedList, Vector | Ordered, duplicates allowed |
Set | HashSet, LinkedHashSet, TreeSet | No duplicates |
Queue | PriorityQueue, ArrayDeque | FIFO processing |
Deque | ArrayDeque, LinkedList | Double-ended queue |
Map | HashMap, LinkedHashMap, TreeMap | Key-value pairs |
SortedSet | TreeSet | Sorted unique elements |
NavigableSet | TreeSet | Navigable sorted set |
SortedMap | TreeMap | Sorted key-value pairs |
NavigableMap | TreeMap | Navigable sorted map |
Concurrent | ConcurrentHashMap, CopyOnWriteArrayList | Thread-safe collections |
Blocking | ArrayBlockingQueue, LinkedBlockingDeque | Thread synchronization |
Notes
- Thread Safety: Most standard collections (ArrayList, HashMap, etc.) are not thread-safe. Use Collections.synchronizedXXX() or concurrent collections for multi-threading.
- Performance: Choose based on use case (e.g., ArrayList for random access, LinkedList for frequent insertions).
- Generics: All modern collections support generics (e.g., List<String>).
Let me know if you’d like examples or deeper explanations for any specific collection!