List = Random (index-based access)
Set = Unique (no duplicates)
Tree = Ordered (sorted order)
Hash = Quick (fast lookup via hashing)
Linked = Easy insert/remove
Vector → ArrayList
Resizable array, synchronized; Thread-safe but slower.
Stack → Deque (ArrayDeque preferred)
LIFO (last-in, first-out) stack; Extends Vector, so also synchronized.
Hashtable → HashMap (or ConcurrentHashMap for thread safety)
Key–value pairs, synchronized; Doesn’t allow null keys or values
// Returns java.util.ImmutableCollections.ListN (internal immutable class)
List<String> list1 = List.of("Alice", "Bob", "Charlie");
Immutable (cannot add, remove, or modify) → Inherently thread-safe
Does not all null → Throws NullPointerException
// java.util.Arrays$ArrayList (backed by the original array)
List<String> list2 = Arrays.asList("Alice", "Bob", "Charlie");
Fixed-size (cannot add/remove, but can modify elements)
Allows null