DSA – Complete Java-Oriented Data Structures Guide
This PDF is a quick-reference + clarity guide for Data Structures in Java. Use it to clear doubts,
understand use-cases, and choose the right DS during problem solving.
1. Array (int[], String[])
• Memory: Contiguous
• Access: O(1) by index
• Insert/Delete: O(n)
Java: int[] arr = new int[n];
Use when: Order matters, fast access needed
Avoid when: Frequent middle insert/delete
2. String / StringBuilder
• String is immutable
• StringBuilder is mutable
Java: String s, StringBuilder sb
Use when: Text, substrings, pattern problems
Tip: Use StringBuilder in loops
3. ArrayList
• Dynamic array
• Access: O(1)
• Insert/Delete end: O(1), middle: O(n)
Java: ArrayList list
Use when: Dynamic size needed
4. LinkedList
• Non-contiguous memory
• Access: O(n)
• Insert/Delete: O(1) if node known
Java: LinkedList
Use when: Frequent insert/delete
5. Stack / Deque (LIFO)
• Last In First Out
Java: Stack (legacy), Deque
Use when: Undo, recursion simulation, next greater element
6. Queue / Deque (FIFO)
• First In First Out
Java: Queue q = new LinkedList<>();
Use when: BFS, scheduling
7. HashMap
• Key-Value pairs
• Average O(1) operations
Java: HashMap
Use when: Fast lookup, frequency counting
Avoid when: Order matters
8. HashSet
• Unique elements only
• No order
Java: HashSet
Use when: Duplicate detection, uniqueness
9. Tree / Binary Tree
• Hierarchical structure
• DFS / BFS traversal
Java: Custom TreeNode class
Use when: Hierarchy, recursion
10. Binary Search Tree (BST)
• Left < Root < Right
• Inorder gives sorted order
Use when: Sorted data with search
11. Heap / PriorityQueue
• MinHeap by default in Java
• Insert/Delete: O(log n)
Java: PriorityQueue
Use when: Top-K, repeated min/max
12. Graph
• Nodes + edges
• Directed / Undirected
Java: ArrayList>
Use when: Network, paths, dependencies
13. Trie
• Prefix-based tree
• Fast prefix search
Use when: Autocomplete, dictionary problems
Pattern → Data Structure Mapping
• Fast lookup → HashMap
• Sliding window → Deque
• Next greater → Stack
• BFS → Queue
• DFS → Recursion / Stack
• Top-K → Heap
• Prefix search → Trie
Golden Rules
1. Start with brute force
2. Find the bottleneck
3. Pick the DS that removes it
4. Prefer Java standard collections