DEV Community

Sudhakar V
Sudhakar V

Posted on

Collections in Java

Java Collections Framework provides classes and interfaces to store, retrieve, and manipulate groups of objects efficiently. Unlike arrays, collections can grow dynamically and provide built-in methods for operations like sorting, searching, and iteration.


1. Key Interfaces in Java Collections

Interface Description
Collection Root interface for all collections (except Map).
List Ordered collection (allows duplicates).
Set Unordered collection (no duplicates).
Queue Follows FIFO (First-In-First-Out) order.
Deque Double-ended queue (supports FIFO & LIFO).
Map Stores key-value pairs (not part of Collection but part of Collections Framework).

2. Key Classes in Java Collections

Interface Implementations
List ArrayList, LinkedList, Vector, Stack
Set HashSet, LinkedHashSet, TreeSet
Queue PriorityQueue, ArrayDeque
Map HashMap, LinkedHashMap, TreeMap, Hashtable

3. List (Ordered, Allows Duplicates)

3.1 ArrayList

  • Dynamic array (resizable).
  • Fast random access (O(1)).
  • Slower insertions/deletions in the middle (O(n)).
List<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
System.out.println(list);  // [Apple, Banana, Cherry]
Enter fullscreen mode Exit fullscreen mode

3.2 LinkedList

  • Doubly-linked list.
  • Faster insertions/deletions (O(1)).
  • Slower random access (O(n)).
List<Integer> linkedList = new LinkedList<>();
linkedList.add(10);
linkedList.add(20);
linkedList.addFirst(5);  // Adds at the beginning
System.out.println(linkedList);  // [5, 10, 20]
Enter fullscreen mode Exit fullscreen mode

3.3 Vector (Thread-Safe but Legacy)

  • Similar to ArrayList but synchronized (thread-safe).
  • Slower due to synchronization.
Vector<String> vec = new Vector<>();
vec.add("One");
vec.add("Two");
System.out.println(vec);  // [One, Two]
Enter fullscreen mode Exit fullscreen mode

3.4 Stack (LIFO - Last-In-First-Out)

  • Extends Vector.
  • push(), pop(), peek() methods.
Stack<Integer> stack = new Stack<>();
stack.push(10);
stack.push(20);
System.out.println(stack.pop());  // 20 (removes & returns)
System.out.println(stack.peek()); // 10 (only retrieves)
Enter fullscreen mode Exit fullscreen mode

4. Set (No Duplicates, Unordered)

4.1 HashSet

  • Uses HashMap internally.
  • No order (fastest for add/remove/contains).
  • O(1) average time complexity.
Set<String> set = new HashSet<>();
set.add("Dog");
set.add("Cat");
set.add("Dog");  // Duplicate ignored
System.out.println(set);  // [Cat, Dog] (order not guaranteed)
Enter fullscreen mode Exit fullscreen mode

4.2 LinkedHashSet

  • Maintains insertion order.
  • Slower than HashSet but ordered.
Set<Integer> linkedSet = new LinkedHashSet<>();
linkedSet.add(30);
linkedSet.add(10);
linkedSet.add(20);
System.out.println(linkedSet);  // [30, 10, 20] (insertion order)
Enter fullscreen mode Exit fullscreen mode

4.3 TreeSet

  • Sorted (natural order or custom comparator).
  • O(log n) for operations (uses TreeMap).
Set<Integer> treeSet = new TreeSet<>();
treeSet.add(50);
treeSet.add(20);
treeSet.add(80);
System.out.println(treeSet);  // [20, 50, 80] (sorted)
Enter fullscreen mode Exit fullscreen mode

5. Queue (FIFO - First-In-First-Out)

5.1 PriorityQueue

  • Orders elements based on priority (min-heap by default).
  • No null allowed.
Queue<Integer> pq = new PriorityQueue<>();
pq.add(30);
pq.add(10);
pq.add(20);
System.out.println(pq.poll());  // 10 (removes smallest first)
Enter fullscreen mode Exit fullscreen mode

5.2 ArrayDeque (Faster than LinkedList for Queue ops)

  • Double-ended queue (FIFO & LIFO).
  • Faster than LinkedList for queue operations.
Deque<String> deque = new ArrayDeque<>();
deque.addFirst("First");
deque.addLast("Last");
System.out.println(deque);  // [First, Last]
Enter fullscreen mode Exit fullscreen mode

6. Map (Key-Value Pairs)

6.1 HashMap

  • No order, allows null key/value.
  • O(1) average time for get(), put().
Map<String, Integer> map = new HashMap<>();
map.put("Alice", 25);
map.put("Bob", 30);
System.out.println(map.get("Alice"));  // 25
Enter fullscreen mode Exit fullscreen mode

6.2 LinkedHashMap

  • Maintains insertion order.
Map<String, Integer> linkedMap = new LinkedHashMap<>();
linkedMap.put("Zebra", 1);
linkedMap.put("Apple", 2);
System.out.println(linkedMap);  // {Zebra=1, Apple=2} (insertion order)
Enter fullscreen mode Exit fullscreen mode

6.3 TreeMap

  • Sorted by keys (natural/comparator order).
  • O(log n) for operations.
Map<String, Integer> treeMap = new TreeMap<>();
treeMap.put("Banana", 3);
treeMap.put("Apple", 1);
System.out.println(treeMap);  // {Apple=1, Banana=3} (sorted)
Enter fullscreen mode Exit fullscreen mode

6.4 Hashtable (Legacy, Thread-Safe)

  • Synchronized (thread-safe).
  • No null keys/values allowed.
Hashtable<Integer, String> table = new Hashtable<>();
table.put(1, "One");
table.put(2, "Two");
System.out.println(table.get(1));  // "One"
Enter fullscreen mode Exit fullscreen mode

7. Collections Utility Class

Provides useful methods like sort(), reverse(), shuffle(), etc.

List<Integer> numbers = new ArrayList<>(Arrays.asList(5, 3, 9, 1));
Collections.sort(numbers);  // [1, 3, 5, 9]
Collections.reverse(numbers);  // [9, 5, 3, 1]
Collections.shuffle(numbers);  // Random order
Enter fullscreen mode Exit fullscreen mode

8. When to Use Which Collection?

Requirement Best Collection Choice
Fast access by index ArrayList
Frequent insertions/deletions LinkedList
No duplicates, fast lookup HashSet
No duplicates, sorted TreeSet
FIFO processing PriorityQueue / ArrayDeque
Key-value pairs, fast lookup HashMap
Key-value pairs, sorted TreeMap
Thread-safe operations Vector, Hashtable, ConcurrentHashMap

9. Summary

List → Ordered, allows duplicates (ArrayList, LinkedList)

Set → No duplicates (HashSet, TreeSet, LinkedHashSet)

Queue → FIFO (PriorityQueue, ArrayDeque)

Map → Key-value pairs (HashMap, TreeMap, LinkedHashMap)

Collections class → Utility methods (sort, reverse, shuffle)

Java Collections Framework is powerful and flexible, allowing efficient data storage and manipulation. Choose the right collection based on your needs! 🚀

Top comments (0)