Posts

Showing posts with the label Data Structures

How HashMap get() Method Works Internally in Java

Image
The get() method in HashMap is one of the most commonly used operations. Although it looks like a simple key lookup, internally it involves hashing, bucket indexing, and collision handling. In this article, we’ll break down the internal working of HashMap.get() step by step with examples. 1. Hashing the Key When you call map.get(key) , the HashMap computes a hash value using the key’s hashCode() . In Java 8+, this value is further processed with bitwise operations to spread the hash bits and reduce collisions. int hash = hash(key.hashCode()); 2. Finding the Bucket The hash value is then converted into an index in the internal array (called table ) using: int index = (n - 1) & hash; // n = table.length This determines the bucket where the entry might be stored. 3. Searching Inside the Bucket Each bucket can contain: null → no entry stored A single key-value pair A linked list of nodes (if multiple keys hash to the same bucket) A red-blac...

Insertion Sort — Theory & Code

Image
Insertion Sort is a simple, intuitive algorithm ideal for small or nearly sorted datasets. In this blog post, we’ll delve deep into the workings of Insertion Sort—covering the core concept, step-by-step visualization, Java implementation, and performance evaluation. 1. What is Insertion Sort? Insertion Sort builds a sorted array one element at a time. You pick the next element from the unsorted portion and insert it into its correct position within the sorted portion, shifting elements as needed. 2. Step-by-Step Illustration Unsorted array: [5] [2] [4] [6] [1] [3] Iteration 1: Sorted: [5] Take next: 2 → insert before 5 Array becomes: [2] [5] [4] [6] [1] [3] Iteration 2: Sorted: [2] [5] Next: 4 → shift 5 to right, insert 4 → [2] [4] [5] [6] [1] [3] Continue until sorted. Diagram (ASCII): Initial: 5 | 2 4 6 1 3 Step 1: 2 5 | 4 6 1 3 Step 2: 2 4 5 | 6 1 3 Step 3: 2 4 5 6 | 1 3 ... Final: 1 2 3 4 5 6 3. Java Implementat...

Cycle Sort in Java — An In-Depth Guide

Image
When preparing for interviews at top companies like Amazon, Google, and Microsoft , you will often encounter problems that require efficient in-place sorting . One such elegant yet lesser-known algorithm is Cycle Sort . Unlike traditional sorting algorithms, Cycle Sort minimizes the number of writes, making it highly efficient when write operations are costly. 🔹 What is Cycle Sort? Cycle Sort is an in-place, comparison-based sorting algorithm. It works by placing each element directly in its correct position using the concept of cycles . Once an element is placed in the right spot, we continue the cycle until the entire array is sorted. Key Features: Minimizes the number of write operations (best choice when memory writes are expensive). Performs sorting in-place with constant space complexity (O(1)). Has a time complexity of O(n²), which makes it less practical for large datasets. 🔹 How Cycle Sort Works Let’s break the algorithm into simple steps: Sta...

ArrayList vs LinkedList in Java

Image
Java’s Collections Framework provides two commonly used List implementations: ArrayList and LinkedList . While both implement the List interface , they differ in their underlying data structures, performance, and use cases. Let’s break down their differences with examples and diagrams. 1. Underlying Structure ArrayList → Backed by a dynamic array. Elements are stored in contiguous memory . LinkedList → Implemented as a doubly-linked list. Each node stores data + pointers to the previous and next node. Diagram: ArrayList (Dynamic Array) [ 0 ] → [ 1 ] → [ 2 ] → [ 3 ] → [ 4 ] (index based access) LinkedList (Doubly Linked Nodes) NULL ← [0 | *] ↔ [1 | *] ↔ [2 | *] ↔ [3 | *] → NULL 2. Code Example ArrayList Example: import java.util.*; public class ArrayListExample { public static void main(String[] args) { List list = new ArrayList<>(); list.add("Java"); list.add("Python"); list.add("C+...