DEV Community

swati goyal
swati goyal

Posted on

Java Collections Cheat Sheet

1. Collection Hierarchy

Collection
│
├── List
│   ├── ArrayList
│   ├── LinkedList
│   └── Vector
│
├── Set
│   ├── HashSet
│   ├── LinkedHashSet
│   └── TreeSet
│
└── Queue
    ├── PriorityQueue
    └── Deque
        ├── ArrayDeque
        └── LinkedList

Map (separate hierarchy)
├── HashMap
├── LinkedHashMap
├── TreeMap
└── Hashtable
Enter fullscreen mode Exit fullscreen mode

2. List

ArrayList

Features

  • Dynamic array
  • Fast random access
  • Slower insert/delete in middle
  • Allows duplicates
  • Maintains insertion order

Time Complexity

Operation Complexity
get(index) O(1)
add() O(1) amortized
add(index) O(n)
remove(index) O(n)
contains() O(n)

Syntax

List<Integer> list = new ArrayList<>();

list.add(10);
list.add(20);
list.add(30);

System.out.println(list.get(1));

list.remove(1);

System.out.println(list.contains(10));
Enter fullscreen mode Exit fullscreen mode

LinkedList

Features

  • Doubly linked list
  • Fast insertion/deletion
  • Slow random access
  • Can work as List + Queue + Deque

Time Complexity

Operation Complexity
get(index) O(n)
addFirst() O(1)
addLast() O(1)
removeFirst() O(1)
removeLast() O(1)

Syntax

LinkedList<Integer> list = new LinkedList<>();

list.addFirst(10);
list.addLast(20);

System.out.println(list.getFirst());
System.out.println(list.getLast());

list.removeFirst();
list.removeLast();
Enter fullscreen mode Exit fullscreen mode

3. Set

HashSet

Features

  • Stores unique elements
  • No insertion order guarantee
  • Backed by HashMap

Time Complexity

Operation Complexity
add O(1)
remove O(1)
contains O(1)

Syntax

Set<Integer> set = new HashSet<>();

set.add(10);
set.add(20);
set.add(10);

System.out.println(set);
Enter fullscreen mode Exit fullscreen mode

LinkedHashSet

Features

  • Unique elements
  • Maintains insertion order

Syntax

Set<Integer> set = new LinkedHashSet<>();
Enter fullscreen mode Exit fullscreen mode

TreeSet

Features

  • Sorted set
  • Uses Red-Black Tree
  • Unique elements

Time Complexity

Operation Complexity
add O(log n)
remove O(log n)
contains O(log n)

Syntax

TreeSet<Integer> set = new TreeSet<>();

set.add(30);
set.add(10);
set.add(20);

System.out.println(set);
Enter fullscreen mode Exit fullscreen mode

Useful Methods

set.first();
set.last();
set.ceiling(25);
set.floor(25);
set.higher(20);
set.lower(20);
Enter fullscreen mode Exit fullscreen mode

4. Map

HashMap

Features

  • Key-value pairs
  • Keys are unique
  • No ordering guarantee
  • Allows one null key

Time Complexity

Operation Complexity
put O(1)
get O(1)
remove O(1)
containsKey O(1)

Syntax

Map<Integer, String> map = new HashMap<>();

map.put(1, "Apple");
map.put(2, "Banana");

System.out.println(map.get(1));

map.remove(2);

System.out.println(map.containsKey(1));
Enter fullscreen mode Exit fullscreen mode

Iteration

for(Map.Entry<Integer, String> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " " + entry.getValue());
}
Enter fullscreen mode Exit fullscreen mode

LinkedHashMap

Features

  • Maintains insertion order
  • Used in LRU Cache

Syntax

Map<Integer, String> map = new LinkedHashMap<>();
Enter fullscreen mode Exit fullscreen mode

Access Order LinkedHashMap

LinkedHashMap<Integer, Integer> map =
    new LinkedHashMap<>(16, 0.75f, true);
Enter fullscreen mode Exit fullscreen mode

TreeMap

Features

  • Sorted by keys
  • Uses Red-Black Tree

Time Complexity

Operation Complexity
put O(log n)
get O(log n)
remove O(log n)

Syntax

TreeMap<Integer, String> map = new TreeMap<>();
Enter fullscreen mode Exit fullscreen mode

Useful Methods

map.firstKey();
map.lastKey();
map.ceilingKey(10);
map.floorKey(10);
map.higherKey(10);
map.lowerKey(10);
Enter fullscreen mode Exit fullscreen mode

5. Queue

Queue Interface

Methods

Method Meaning
offer() insert
poll() remove front
peek() get front

Syntax

Queue<Integer> q = new LinkedList<>();

q.offer(10);
q.offer(20);

System.out.println(q.peek());

q.poll();
Enter fullscreen mode Exit fullscreen mode

6. PriorityQueue (Heap)

Min Heap (Default)

PriorityQueue<Integer> pq = new PriorityQueue<>();
Enter fullscreen mode Exit fullscreen mode

Top Element

  • Smallest element

Max Heap

PriorityQueue<Integer> pq =
    new PriorityQueue<>((a, b) -> b - a);
Enter fullscreen mode Exit fullscreen mode

OR

PriorityQueue<Integer> pq =
    new PriorityQueue<>(Collections.reverseOrder());
Enter fullscreen mode Exit fullscreen mode

Top Element

  • Largest element

Heap Operations

Method Meaning
add() / offer() insert
poll() remove top
peek() get top

7. Deque

ArrayDeque

Features

  • Faster than Stack
  • Faster than LinkedList for queue operations
  • Double-ended queue

Syntax

Deque<Integer> dq = new ArrayDeque<>();

// Front

dq.addFirst(10);
dq.removeFirst();
dq.peekFirst();

// Back

dq.addLast(20);
dq.removeLast();
dq.peekLast();
Enter fullscreen mode Exit fullscreen mode

8. Stack

Preferred: ArrayDeque

Deque<Integer> stack = new ArrayDeque<>();

stack.push(10);
stack.push(20);

System.out.println(stack.peek());

stack.pop();
Enter fullscreen mode Exit fullscreen mode

9. Collections Utility Methods

Sorting

Collections.sort(list);
Collections.sort(list, Collections.reverseOrder());
Enter fullscreen mode Exit fullscreen mode

Reverse

Collections.reverse(list);
Enter fullscreen mode Exit fullscreen mode

Max / Min

Collections.max(list);
Collections.min(list);
Enter fullscreen mode Exit fullscreen mode

Frequency

Collections.frequency(list, 10);
Enter fullscreen mode Exit fullscreen mode

10. Comparator

Ascending

(a, b) -> a - b
Enter fullscreen mode Exit fullscreen mode

Descending

(a, b) -> b - a
Enter fullscreen mode Exit fullscreen mode

Safer Comparator

Integer.compare(a, b)
Integer.compare(b, a)
Enter fullscreen mode Exit fullscreen mode

11. Common Interview Patterns

Frequency Map

Map<Integer, Integer> freq = new HashMap<>();

for(int num : nums) {
    freq.put(num, freq.getOrDefault(num, 0) + 1);
}
Enter fullscreen mode Exit fullscreen mode

Top K Elements

PriorityQueue<Integer> pq = new PriorityQueue<>();
Enter fullscreen mode Exit fullscreen mode

Use min heap of size k.


BFS

Queue<Integer> q = new LinkedList<>();
Enter fullscreen mode Exit fullscreen mode

Monotonic Stack

Deque<Integer> stack = new ArrayDeque<>();
Enter fullscreen mode Exit fullscreen mode

Sliding Window Maximum

Deque<Integer> dq = new ArrayDeque<>();
Enter fullscreen mode Exit fullscreen mode

12. Important Differences

ArrayList vs LinkedList

Feature ArrayList LinkedList
Random Access Fast Slow
Insert/Delete Middle Slow Faster
Memory Less More

HashMap vs TreeMap

Feature HashMap TreeMap
Ordering No Sorted
Complexity O(1) O(log n)
Internal DS Hash Table Red-Black Tree

HashSet vs TreeSet

Feature HashSet TreeSet
Ordering No Sorted
Complexity O(1) O(log n)

13. Useful Java 8 Features

forEach

list.forEach(System.out::println);
Enter fullscreen mode Exit fullscreen mode

Stream Sort

list.stream().sorted().toList();
Enter fullscreen mode Exit fullscreen mode

Custom Object Sorting

Collections.sort(list, (a, b) -> a.age - b.age);
Enter fullscreen mode Exit fullscreen mode

14. Common Mistakes

List remove()

list.remove(2);
Enter fullscreen mode Exit fullscreen mode

Removes index 2.

To remove value:

list.remove(Integer.valueOf(2));
Enter fullscreen mode Exit fullscreen mode

PriorityQueue is Min Heap by Default

PriorityQueue<Integer> pq = new PriorityQueue<>();
Enter fullscreen mode Exit fullscreen mode

Top is smallest.


HashMap Ordering

HashMap does NOT maintain insertion order.

Use:

LinkedHashMap
Enter fullscreen mode Exit fullscreen mode

if order matters.


15. Most Important Interview Collections

Use Case Collection
Frequency Count HashMap
Unique Elements HashSet
Sorted Data TreeMap / TreeSet
BFS Queue
Heap Problems PriorityQueue
Stack Problems ArrayDeque
LRU Cache LinkedHashMap
Fast Random Access ArrayList
Fast Front/Back Ops LinkedList / ArrayDeque

Top comments (0)