<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Tapas Pal</title>
    <description>The latest articles on Forem by Tapas Pal (@tapaspal).</description>
    <link>https://forem.com/tapaspal</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3925877%2F8aaa6fa2-66fc-4530-b1e5-d3c5eb7eca0d.jpg</url>
      <title>Forem: Tapas Pal</title>
      <link>https://forem.com/tapaspal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/tapaspal"/>
    <language>en</language>
    <item>
      <title>Find First Non Repeating Character - Java Program With Time and Space Complexity</title>
      <dc:creator>Tapas Pal</dc:creator>
      <pubDate>Wed, 13 May 2026 04:49:30 +0000</pubDate>
      <link>https://forem.com/tapaspal/find-first-non-repeating-character-java-program-with-time-and-space-complexity-4lje</link>
      <guid>https://forem.com/tapaspal/find-first-non-repeating-character-java-program-with-time-and-space-complexity-4lje</guid>
      <description>&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Problem Statement
Given a string: "swiss"
Find the first character that appears only once.
Expected Output : w
Because:
s repeats
w appears once and comes first
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;br&gt;
Best Approach (Using LinkedHashMap)&lt;br&gt;
We will use: &lt;strong&gt;LinkedHashMap&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Why?&lt;/strong&gt; Because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stores frequency count&lt;/li&gt;
&lt;li&gt;Maintains insertion order&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Approach-1 : Frequency Array (int[256])&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Method to find the first non-repeating character&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FirstNonRepeatingCharacter&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nc"&gt;Character&lt;/span&gt; &lt;span class="nf"&gt;firstNonRepeating&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
         &lt;span class="c1"&gt;// Check if string is null or empty&lt;/span&gt;
        &lt;span class="c1"&gt;// If yes, return null because no character exists&lt;/span&gt;
       &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEmpty&lt;/span&gt;&lt;span class="o"&gt;()){&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="c1"&gt;// Create frequency array of size 256&lt;/span&gt;
        &lt;span class="c1"&gt;// Each index represents an ASCII character&lt;/span&gt;
        &lt;span class="c1"&gt;// Example: freq['a'] stores count of 'a'&lt;/span&gt;
       &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;freq&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="o"&gt;];&lt;/span&gt;
       &lt;span class="c1"&gt;// Convert string into char array and iterate each character&lt;/span&gt;
       &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;ch&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toCharArray&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
           &lt;span class="c1"&gt;// Increment frequency count of character&lt;/span&gt;
           &lt;span class="n"&gt;freq&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ch&lt;/span&gt;&lt;span class="o"&gt;]++;&lt;/span&gt;
       &lt;span class="o"&gt;}&lt;/span&gt;
       &lt;span class="c1"&gt;// Iterate again to preserve original order&lt;/span&gt;
       &lt;span class="c1"&gt;// We need FIRST non-repeating character&lt;/span&gt;
       &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;ch&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toCharArray&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
          &lt;span class="c1"&gt;// Check if character frequency is exactly 1&lt;/span&gt;
          &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;freq&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ch&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
             &lt;span class="c1"&gt;// Return first unique character immediately&lt;/span&gt;
             &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;ch&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
          &lt;span class="o"&gt;}&lt;/span&gt;
       &lt;span class="o"&gt;}&lt;/span&gt;
   &lt;span class="c1"&gt;// If no non-repeating character found&lt;/span&gt;
   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
   &lt;span class="o"&gt;}&lt;/span&gt;
   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Example 1&lt;/span&gt;
        &lt;span class="c1"&gt;// swiss&lt;/span&gt;
        &lt;span class="c1"&gt;// s -&amp;gt; 3&lt;/span&gt;
        &lt;span class="c1"&gt;// w -&amp;gt; 1&lt;/span&gt;
        &lt;span class="c1"&gt;// i -&amp;gt; 1&lt;/span&gt;
        &lt;span class="c1"&gt;// First non-repeating = w&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;firstNonRepeating&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"swiss"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
        &lt;span class="c1"&gt;// Example 2&lt;/span&gt;
        &lt;span class="c1"&gt;// null input&lt;/span&gt;
        &lt;span class="c1"&gt;// returns null&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;firstNonRepeating&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Approach-2 : LinkedHashMap&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FirstNonRepeatingCharacter&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nc"&gt;Character&lt;/span&gt; &lt;span class="nf"&gt;findFirstNonRepeating&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEmpty&lt;/span&gt;&lt;span class="o"&gt;()){&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="c1"&gt;// Step 1: Create LinkedHashMap to store character frequencies&lt;/span&gt;
        &lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Character&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;LinkedHashMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;
        &lt;span class="c1"&gt;// Step 2: Count frequency of each character&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;ch&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toCharArray&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;//If key exists → return value otherwise return default   &lt;/span&gt;
       &lt;span class="c1"&gt;//value 0, for first time of each character always map.getOrDefault(ch, 0) = 0&lt;/span&gt;
            &lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ch&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getOrDefault&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ch&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="c1"&gt;// Step 3: Find first character with frequency 1&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Entry&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Character&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;entrySet&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getValue&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getKey&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;firstNonRepeating&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"swiss"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;firstNonRepeating&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Approach-3 : Java Streams + groupingBy&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FirstNonRepeatingCharacter&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="nf"&gt;firstNonRepeating&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
       &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEmpty&lt;/span&gt;&lt;span class="o"&gt;()){&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
       &lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Character&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Long&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
            &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;chars&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
             &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;mapToObj&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
             &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;collect&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Collectors&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;groupingBy&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
                     &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
                     &lt;span class="nl"&gt;LinkedHashMap:&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
                     &lt;span class="nc"&gt;Collectors&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;counting&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
             &lt;span class="o"&gt;));&lt;/span&gt;

       &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;entrySet&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
              &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;stream&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
              &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;filter&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getValue&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
              &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;map&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Entry&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;getKey&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
              &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;findFirst&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
              &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;orElse&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;firstNonRepeating&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"swiss"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;firstNonRepeating&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Comparing 3 Approaches for First Non-Repeating Character&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We will compare:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Frequency Array (int[256])&lt;/li&gt;
&lt;li&gt;LinkedHashMap&lt;/li&gt;
&lt;li&gt;Java Streams + groupingBy&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We’ll analyze:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;readability&lt;/li&gt;
&lt;li&gt;performance&lt;/li&gt;
&lt;li&gt;memory usage&lt;/li&gt;
&lt;li&gt;Unicode support&lt;/li&gt;
&lt;li&gt;interview suitability&lt;/li&gt;
&lt;li&gt;production suitability&lt;/li&gt;
&lt;li&gt;Problem Statement&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;Input: "swiss"&lt;/code&gt;&lt;br&gt;
Frequency:&lt;br&gt;
s -&amp;gt; 3&lt;br&gt;
w -&amp;gt; 1&lt;br&gt;
i -&amp;gt; 1&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Output: w&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Approach 1 — Frequency Array (int[256])&lt;/strong&gt;&lt;br&gt;
Code Logic&lt;br&gt;
&lt;code&gt;int[] freq = new int[256];&lt;/code&gt;&lt;br&gt;
Store frequency using ASCII index.&lt;br&gt;
Example: &lt;code&gt;freq['s']&lt;/code&gt;&lt;br&gt;
stores count of s. Visual Flow "swiss"&lt;br&gt;
↓&lt;br&gt;
freq['s'] = 3&lt;br&gt;
freq['w'] = 1&lt;br&gt;
freq['i'] = 1&lt;br&gt;
Second loop:&lt;br&gt;
s -&amp;gt; 3 ❌&lt;br&gt;
w -&amp;gt; 1 ✅&lt;br&gt;
&lt;code&gt;Return:  w&lt;/code&gt;&lt;br&gt;
Time Complexity  &lt;code&gt;Two loops: O(n) + O(n)&lt;/code&gt;&lt;br&gt;
Final: &lt;code&gt;O(n)&lt;/code&gt;&lt;br&gt;
Space Complexity &lt;code&gt;int[256]&lt;/code&gt;&lt;br&gt;
Fixed size, so: &lt;code&gt;O(1)&lt;/code&gt; (constant space)&lt;br&gt;
Advantages&lt;br&gt;
✅ Fastest approach&lt;br&gt;
✅ Lowest memory usage&lt;br&gt;
✅ Very interview-friendly&lt;br&gt;
✅ Excellent cache locality&lt;br&gt;
✅ No object creation overhead&lt;br&gt;
Disadvantages&lt;br&gt;
❌ ASCII only&lt;br&gt;
❌ Not Unicode-safe&lt;br&gt;
❌ Less flexible&lt;br&gt;
❌ Hardcoded size assumption&lt;br&gt;
Important Unicode Problem&lt;br&gt;
This breaks for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chinese&lt;/li&gt;
&lt;li&gt;Japanese&lt;/li&gt;
&lt;li&gt;Emoji&lt;/li&gt;
&lt;li&gt;Unicode chars&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because Unicode exceeds 256.&lt;br&gt;
Best Use Case Best for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;competitive programming&lt;/li&gt;
&lt;li&gt;ASCII-only systems&lt;/li&gt;
&lt;li&gt;performance-critical code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Approach 2 — LinkedHashMap&lt;/strong&gt;&lt;br&gt;
Code Logic&lt;br&gt;
&lt;code&gt;Map&amp;lt;Character, Integer&amp;gt; map = new LinkedHashMap&amp;lt;&amp;gt;();&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why LinkedHashMap?&lt;/strong&gt; Preserves insertion order&lt;/p&gt;

&lt;p&gt;Needed for: FIRST non-repeating character&lt;br&gt;
&lt;code&gt;Time Complexity Insertion: O(1) for each char.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Total: &lt;code&gt;O(n) Space Complexity&lt;/code&gt;&lt;br&gt;
Worst case: all unique characters&lt;br&gt;
Map stores all. So: &lt;code&gt;O(n)&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Advantages&lt;/strong&gt;&lt;br&gt;
✅ Unicode-safe&lt;br&gt;
✅ Easy to understand&lt;br&gt;
✅ Flexible&lt;br&gt;
✅ Maintains insertion order&lt;br&gt;
✅ Production-friendly&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages&lt;/strong&gt;&lt;br&gt;
❌ More memory usage&lt;br&gt;
❌ Object overhead&lt;br&gt;
❌ HashMap node overhead&lt;br&gt;
❌ Slightly slower than array&lt;/p&gt;

&lt;p&gt;Internal Memory Cost Each entry stores:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Character object&lt;/li&gt;
&lt;li&gt;Integer object&lt;/li&gt;
&lt;li&gt;Node object&lt;/li&gt;
&lt;li&gt;next pointer&lt;/li&gt;
&lt;li&gt;hash&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Much heavier than array.&lt;br&gt;
&lt;strong&gt;Best Use Case&lt;/strong&gt;&lt;br&gt;
Best for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;enterprise applications&lt;/li&gt;
&lt;li&gt;Unicode support&lt;/li&gt;
&lt;li&gt;maintainable code&lt;/li&gt;
&lt;li&gt;real production systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Approach 3 — Streams + groupingBy&lt;/strong&gt;&lt;br&gt;
Code Logic &lt;code&gt;str.chars()&lt;/code&gt;&lt;br&gt;
Convert string to stream. Then: &lt;code&gt;groupingBy(...)&lt;/code&gt;&lt;br&gt;
creates frequency map.&lt;br&gt;
Visual Flow&lt;br&gt;
"swiss"&lt;br&gt;
↓ chars()&lt;br&gt;
115 119 105 115 115&lt;br&gt;
↓ mapToObj()&lt;br&gt;
[s,w,i,s,s]&lt;br&gt;
↓ groupingBy()&lt;br&gt;
{&lt;br&gt;
 s=3,&lt;br&gt;
 w=1,&lt;br&gt;
 i=1&lt;br&gt;
}&lt;br&gt;
↓ filter(value == 1)&lt;br&gt;
w&lt;br&gt;
&lt;code&gt;Time Complexity Still: O(n)&lt;/code&gt;&lt;br&gt;
BUT Important Hidden Cost&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Streams introduce:&lt;/li&gt;
&lt;li&gt;lambda calls&lt;/li&gt;
&lt;li&gt;boxing/unboxing&lt;/li&gt;
&lt;li&gt;stream pipeline overhead&lt;/li&gt;
&lt;li&gt;temporary objects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;So practical runtime is slower. Space Complexity&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Internally creates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stream objects&lt;/li&gt;
&lt;li&gt;Collectors&lt;/li&gt;
&lt;li&gt;Lambda instances&lt;/li&gt;
&lt;li&gt;LinkedHashMap&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Worst case: &lt;code&gt;O(n)&lt;/code&gt;&lt;br&gt;
but with higher constant factors.&lt;br&gt;
&lt;strong&gt;Advantages&lt;/strong&gt;&lt;br&gt;
✅ Elegant&lt;br&gt;
✅ Functional style&lt;br&gt;
✅ Modern Java&lt;br&gt;
✅ Very expressive&lt;br&gt;
✅ Concise&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disadvantages&lt;/strong&gt;&lt;br&gt;
❌ Slowest approach&lt;br&gt;
❌ More garbage objects&lt;br&gt;
❌ Higher memory overhead&lt;br&gt;
❌ Harder debugging&lt;br&gt;
❌ Less beginner-friendly&lt;/p&gt;

&lt;p&gt;Performance Reality Even though all are: &lt;code&gt;O(n)&lt;/code&gt;&lt;br&gt;
Big difference exists in actual runtime.&lt;br&gt;
&lt;strong&gt;Real Runtime Ranking **&lt;br&gt;
&lt;code&gt;Array &amp;gt; LinkedHashMap &amp;gt; Streams&lt;/code&gt;&lt;br&gt;
**Memory Ranking Least memory → Highest memory&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;Array &amp;gt; LinkedHashMap &amp;gt; Streams&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Readability Ranking&lt;/strong&gt;&lt;br&gt;
Most readable: LinkedHashMap&lt;br&gt;
Most concise: Streams&lt;br&gt;
Most low-level: Array&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9l0uplqjfbno8k18w28s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9l0uplqjfbno8k18w28s.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DRY RUN WITH APPROACH 2(LinkedHashMap) with input&lt;/strong&gt; &lt;code&gt;swiss&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Step 1 — Null/Empty Check&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEmpty&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Input: "swiss"&lt;br&gt;
Condition: false&lt;br&gt;
Continue execution.&lt;br&gt;
&lt;strong&gt;Step 2 — Create LinkedHashMap&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Character&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;LinkedHashMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Initially: {} (empty map)&lt;br&gt;
IMPORTANT&lt;br&gt;
LinkedHashMap preserves insertion order. This is critical.&lt;br&gt;
&lt;strong&gt;Step 3 — Convert String to char[]&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;str.toCharArray()&lt;/code&gt;&lt;br&gt;
Result: [s, w, i, s, s]&lt;br&gt;
FIRST LOOP — Count Frequencies&lt;br&gt;
Iteration 1 char ch = 's'&lt;br&gt;
Execute &lt;code&gt;map.getOrDefault('s', 0)&lt;/code&gt;&lt;br&gt;
's' not present.&lt;br&gt;
Returns: 0 Then 0 + 1 becomes: 1&lt;br&gt;
Put into map&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="sc"&gt;'s'&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Map Now&lt;br&gt;
{&lt;br&gt;
  s=1&lt;br&gt;
}&lt;br&gt;
&lt;strong&gt;Visual Representation&lt;/strong&gt;&lt;br&gt;
Head&lt;br&gt;
 ↓&lt;br&gt;
[s=1]&lt;br&gt;
Iteration 2&lt;br&gt;
char ch = 'w'&lt;br&gt;
Execute&lt;br&gt;
map.getOrDefault('w', 0)&lt;br&gt;
'w' absent.&lt;br&gt;
Returns: 0&lt;br&gt;
Put&lt;br&gt;
&lt;code&gt;map.put('w', 1)&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Map Now
{
  s=1,
  w=1
}
Visual
Head
 ↓
[s=1] ⇄ [w=1]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Iteration 3&lt;br&gt;
char ch = 'i'&lt;br&gt;
Execute&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getOrDefault&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="sc"&gt;'i'&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns: 0&lt;br&gt;
Put&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;map.put('i', 1)
Map Now
{
  s=1,
  w=1,
  i=1
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Visual&lt;br&gt;
&lt;code&gt;[s=1] ⇄ [w=1] ⇄ [i=1]&lt;/code&gt;&lt;br&gt;
Iteration 4 char ch = 's'&lt;br&gt;
Execute&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getOrDefault&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="sc"&gt;'s'&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;'s' exists. Returns: 1&lt;br&gt;
Increment&lt;br&gt;
1 + 1 = 2&lt;br&gt;
Update Map&lt;br&gt;
&lt;code&gt;map.put('s', 2)&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Map Now
{
  s=2,
  w=1,
  i=1
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;IMPORTANT&lt;/p&gt;

&lt;p&gt;Insertion order remains SAME.&lt;br&gt;
's' does NOT move.&lt;br&gt;
Visual&lt;br&gt;
&lt;code&gt;[s=2] ⇄ [w=1] ⇄ [i=1]&lt;/code&gt;&lt;br&gt;
Iteration 5&lt;br&gt;
char ch = 's'&lt;br&gt;
Execute&lt;br&gt;
map.getOrDefault('s', 0)&lt;br&gt;
Returns: 2&lt;br&gt;
Increment&lt;br&gt;
2 + 1 = 3&lt;br&gt;
Update&lt;br&gt;
map.put('s', 3)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Final Map
{
  s=3,
  w=1,
  i=1
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Final&lt;/span&gt; &lt;span class="nc"&gt;Internal&lt;/span&gt; &lt;span class="nc"&gt;Linked&lt;/span&gt; &lt;span class="nc"&gt;Order&lt;/span&gt;
&lt;span class="nc"&gt;Head&lt;/span&gt;
 &lt;span class="err"&gt;↓&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="err"&gt;⇄&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="err"&gt;⇄&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="no"&gt;SECOND&lt;/span&gt; &lt;span class="no"&gt;LOOP&lt;/span&gt; &lt;span class="err"&gt;—&lt;/span&gt; &lt;span class="nc"&gt;Find&lt;/span&gt; &lt;span class="nc"&gt;First&lt;/span&gt; &lt;span class="nc"&gt;Non&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nc"&gt;Repeating&lt;/span&gt;
&lt;span class="nc"&gt;Traverse&lt;/span&gt; &lt;span class="nf"&gt;entrySet&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;Entry&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Character&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;entrySet&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Traversal order:&lt;br&gt;
&lt;code&gt;s → w → i&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;because LinkedHashMap preserves insertion order.&lt;/p&gt;

&lt;p&gt;Entry 1&lt;br&gt;
s=3&lt;br&gt;
Check&lt;br&gt;
entry.getValue() == 1&lt;br&gt;
Result: false&lt;br&gt;
Continue.&lt;br&gt;
Entry 2&lt;br&gt;
w=1&lt;br&gt;
Check&lt;br&gt;
entry.getValue() == 1&lt;br&gt;
Result: true&lt;br&gt;
Return return 'w'&lt;br&gt;
Final Output &lt;code&gt;w&lt;/code&gt;&lt;/p&gt;

</description>
      <category>algorithms</category>
      <category>computerscience</category>
      <category>interview</category>
      <category>java</category>
    </item>
    <item>
      <title>Generics in Java Interview Q&amp;A</title>
      <dc:creator>Tapas Pal</dc:creator>
      <pubDate>Tue, 12 May 2026 20:05:24 +0000</pubDate>
      <link>https://forem.com/tapaspal/generics-in-java-interview-qa-4f1k</link>
      <guid>https://forem.com/tapaspal/generics-in-java-interview-qa-4f1k</guid>
      <description>&lt;p&gt;Java Generics is one of the MOST important Java concepts.&lt;br&gt;
If you understand Generics properly:&lt;br&gt;
&lt;code&gt;collections become safer&lt;br&gt;
code becomes reusable&lt;br&gt;
compile-time bugs reduce dramatically&lt;/code&gt;&lt;br&gt;
A generic type is a generic class or interface that is parameterized over types.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Are Generics?&lt;/strong&gt;&lt;br&gt;
Generics allow classes, interfaces, and methods to work with:&lt;br&gt;
&lt;code&gt;different data types safely&lt;/code&gt;&lt;br&gt;
without rewriting code.&lt;br&gt;
&lt;strong&gt;The Diamond&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;In Java SE 7 and later, you can replace the type arguments required to invoke the constructor of a generic class with an empty set of type arguments (&amp;lt;&amp;gt;) as long as the compiler can determine, or infer, the type arguments from the context. This pair of angle brackets, &amp;lt;&amp;gt;, is informally called the diamond. For example, you can create an instance of Box with the following&lt;/em&gt;&lt;br&gt;
statement:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Box&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;integerBox&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Box&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Generic Class&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Box&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="no"&gt;T&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;T&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="no"&gt;T&lt;/span&gt; &lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Usage&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Box&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;box&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
        &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Box&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;
&lt;span class="n"&gt;box&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;set&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;box&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What Does  Mean?&lt;br&gt;
&lt;code&gt;T means:Type parameter&lt;/code&gt;&lt;br&gt;
Placeholder for actual type.&lt;br&gt;
&lt;strong&gt;Common Generic Type Names&lt;/strong&gt;&lt;br&gt;
Symbol  -   Meaning&lt;br&gt;
T   -    Type&lt;br&gt;
E   -    Element&lt;br&gt;
K   -    Key&lt;br&gt;
V   -    Value&lt;br&gt;
N   -   Number&lt;/p&gt;

&lt;p&gt;Same class reused.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Box&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;intBox&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Box&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;
&lt;span class="nc"&gt;Box&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;strBox&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Box&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;DISADVANTAGES OF GENERICS&lt;/strong&gt;&lt;br&gt;
Now let us discuss the IMPORTANT limitations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Type Erasure&lt;/strong&gt;&lt;br&gt;
MOST IMPORTANT limitation.&lt;br&gt;
&lt;code&gt;Java removes generic type information at runtime.&lt;/code&gt;&lt;br&gt;
Example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At runtime becomes: &lt;code&gt;List&lt;/code&gt;&lt;br&gt;
Generic type removed. Why?&lt;br&gt;
&lt;code&gt;Backward compatibility with old Java.&lt;/code&gt;&lt;br&gt;
Consequences of Type Erasure&lt;br&gt;
&lt;code&gt;Cannot Do This&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="k"&gt;instanceof&lt;/span&gt; &lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Compile-time error.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Cannot Create Generic Array&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="no"&gt;T&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="no"&gt;T&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Not allowed. Why?&lt;br&gt;
&lt;code&gt;Because runtime type unknown.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Primitive Types Not Allowed&lt;/strong&gt;&lt;br&gt;
Cannot use: &lt;code&gt;List&amp;lt;int&amp;gt;&lt;/code&gt;&lt;br&gt;
Only objects allowed.&lt;br&gt;
Correct &lt;code&gt;List&amp;lt;Integer&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;em&gt;Uses wrapper classes.&lt;/em&gt;&lt;br&gt;
Problem&lt;br&gt;
Wrapper classes add:&lt;br&gt;
memory overhead&lt;br&gt;
boxing/unboxing cost&lt;br&gt;
Example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ArrayList&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;
&lt;span class="n"&gt;list&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Actually becomes:&lt;br&gt;
Integer.valueOf(10)&lt;br&gt;
Auto-boxing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Cannot Create Static Generic Fields&lt;/strong&gt;&lt;br&gt;
Invalid&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Test&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="no"&gt;T&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why?&lt;br&gt;
&lt;code&gt;A static field belongs to the class,&lt;br&gt;
but a generic type belongs to the object instance/type parameter.&lt;/code&gt;&lt;br&gt;
&lt;em&gt;These two concepts conflict.&lt;/em&gt;&lt;br&gt;
First Understand Static Variables&lt;br&gt;
&lt;code&gt;Static variables are:shared across ALL objects&lt;/code&gt;&lt;br&gt;
Only ONE copy exists.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>interview</category>
      <category>java</category>
      <category>programming</category>
    </item>
    <item>
      <title>Difference Between HashMap and ConcurrentHashMap</title>
      <dc:creator>Tapas Pal</dc:creator>
      <pubDate>Tue, 12 May 2026 19:35:30 +0000</pubDate>
      <link>https://forem.com/tapaspal/difference-between-hashmap-and-concurrenthashmap-mhl</link>
      <guid>https://forem.com/tapaspal/difference-between-hashmap-and-concurrenthashmap-mhl</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frmdthzacp4g43ejbfgx2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frmdthzacp4g43ejbfgx2.png" alt=" " width="383" height="176"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;HashMap is non-thread-safe and optimized for single-threaded performance, while ConcurrentHashMap is designed for concurrent access using fine-grained synchronization and CAS operations. HashMap is preferable for local non-shared data, whereas ConcurrentHashMap is ideal for shared mutable state in multi-threaded applications.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Mutable Key Problem in HashMap</title>
      <dc:creator>Tapas Pal</dc:creator>
      <pubDate>Tue, 12 May 2026 17:55:52 +0000</pubDate>
      <link>https://forem.com/tapaspal/hash-collision-in-java-2iia</link>
      <guid>https://forem.com/tapaspal/hash-collision-in-java-2iia</guid>
      <description>&lt;p&gt;&lt;strong&gt;Mutable Key Problem in HashMap&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;HashMap depends on hashCode() remaining stable&lt;/code&gt;&lt;br&gt;
If the key changes after insertion:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hashCode changes&lt;/li&gt;
&lt;li&gt;bucket location changes&lt;/li&gt;
&lt;li&gt;HashMap cannot find the object anymore&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;First Understand One Critical Rule&lt;br&gt;
HashMap Stores Entry Based On: &lt;code&gt;hashCode() + equals()&lt;/code&gt;&lt;br&gt;
Simple Mutable Key Example&lt;br&gt;
Employee Class&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Employee&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nc"&gt;Employee&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="nd"&gt;@Override&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;hashCode&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hashCode&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="nd"&gt;@Override&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="nf"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Object&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;Employee&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Employee&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 1 — Create Object&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Employee&lt;/span&gt; &lt;span class="n"&gt;emp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Employee&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"John"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Current value:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;name = "John"&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Step 2 — Put into HashMap&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Employee&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;HashMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;
&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;emp&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Developer"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What Happens Internally?&lt;br&gt;
&lt;code&gt;A. HashMap Calls hashCode()&lt;/code&gt;&lt;br&gt;
&lt;code&gt;emp.hashCode()&lt;/code&gt;&lt;br&gt;
Suppose:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"John".hashCode() = 2314539
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;B. Bucket Index Calculated&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Formula:&lt;code&gt;index = (n - 1) &amp;amp; hash&lt;/code&gt;&lt;br&gt;
Suppose result: &lt;code&gt;bucket = 5&lt;/code&gt;&lt;br&gt;
Internal Structure&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bucket 5
   ↓
(Employee{name="John"}, "Developer")

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Everything works correctly.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3 — Retrieve Object&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;emp&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;HashMap again calculates:&lt;br&gt;
&lt;code&gt;"John".hashCode()&lt;/code&gt;&lt;br&gt;
Gets same bucket: &lt;code&gt;bucket 5&lt;/code&gt;&lt;br&gt;
Finds object successfully.&lt;br&gt;
&lt;code&gt;Output:Developer&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;NOW THE DANGEROUS PART&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Step 4 — Modify Key Object&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;emp.name = "David";&lt;/code&gt;&lt;br&gt;
Now object becomes: &lt;code&gt;Employee{name="David"}&lt;/code&gt;&lt;br&gt;
Important Thing The SAME object reference exists.&lt;br&gt;
But: hashCode has changed&lt;br&gt;
&lt;strong&gt;Step 5 — Try Retrieval Again&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;map.get(emp);&lt;/code&gt;&lt;br&gt;
What Happens Internally Now?&lt;br&gt;
A. HashMap Calls hashCode()&lt;br&gt;
Now:&lt;code&gt;"David".hashCode() = 65805908&lt;/code&gt;&lt;br&gt;
&lt;em&gt;Different hashCode.&lt;/em&gt;&lt;br&gt;
B. New Bucket Calculated &lt;code&gt;Now: bucket = 12&lt;/code&gt;&lt;br&gt;
HashMap Searches Wrong Bucket HashMap now checks:&lt;code&gt;Bucket 12&lt;/code&gt;&lt;br&gt;
BUT object actually stored in:&lt;code&gt;Bucket 5&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;BEFORE Mutation&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bucket 5
   ↓
(Employee{name="John"}, "Developer")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;hashCode based on:&lt;code&gt;John&lt;/code&gt;&lt;br&gt;
AFTER Mutation Object becomes:&lt;code&gt;Employee{name="David"}&lt;/code&gt; Now HashMap calculates: &lt;code&gt;bucket 12&lt;/code&gt;&lt;br&gt;
So retrieval searches: &lt;code&gt;Bucket 12 → EMPTY&lt;/code&gt;&lt;br&gt;
Final Result&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;emp&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output: &lt;code&gt;null&lt;/code&gt;&lt;br&gt;
&lt;em&gt;This is called:&lt;/em&gt;&lt;code&gt;Hash-based collection corruption&lt;/code&gt;&lt;br&gt;
Even Worse Scenario&lt;br&gt;
Now try: &lt;code&gt;map.containsKey(emp);&lt;/code&gt;&lt;br&gt;
Output:&lt;code&gt;false&lt;/code&gt; even though object exists inside map.&lt;br&gt;
Another Dangerous Problem&lt;br&gt;
Suppose: &lt;code&gt;map.put(emp, "Manager");&lt;/code&gt;&lt;br&gt;
Now HashMap inserts NEW entry.&lt;br&gt;
Internal State Becomes&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bucket 5
   ↓
(Employee{name="David"}, "Developer")

Bucket 12
   ↓
(Employee{name="David"}, "Manager")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Same object reference appears logically duplicated.&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;Why Immutable Objects are Safe&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Example: &lt;code&gt;String key = "John";&lt;/code&gt; as Strings are immutable.&lt;br&gt;
Meaning:value never changes&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hashCode stable&lt;/li&gt;
&lt;li&gt;bucket stable
So retrieval always works.
Best Practice &lt;code&gt;Always Use Immutable Keys&lt;/code&gt;
Recommended:
&lt;code&gt;String
Integer
UUID
Immutable custom objects
For Custom class use instance variable as final&lt;/code&gt;
&lt;code&gt;How to Create Immutable Key Object&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Employee&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nc"&gt;Employee&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="nd"&gt;@Override&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;hashCode&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hashCode&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="nd"&gt;@Override&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="nf"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Object&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;Employee&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Employee&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now object cannot change after insertion.&lt;code&gt;Safe for HashMap&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Real Production Problems Caused&lt;/p&gt;

&lt;p&gt;Mutable keys can cause:&lt;br&gt;
&lt;code&gt;Memory leaks&lt;br&gt;
Duplicate entries&lt;br&gt;
Data inconsistency&lt;br&gt;
Cache corruption&lt;br&gt;
Hard-to-debug production issues&lt;/code&gt;&lt;br&gt;
Especially dangerous in:&lt;br&gt;
&lt;code&gt;caching systems&lt;br&gt;
distributed systems&lt;br&gt;
Hibernate&lt;br&gt;
microservices&lt;br&gt;
concurrent systems&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q1: Why does retrieval fail even though same object reference is used?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Answer:&lt;/strong&gt; &lt;code&gt;Because HashMap first locates bucket using hashCode().&lt;/code&gt; Reference equality is irrelevant until bucket found.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q2: Can equals() alone solve this?&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Answer:&lt;/strong&gt;  &lt;code&gt;No.&lt;/code&gt;&lt;br&gt;
Because equals() is checked only AFTER correct bucket located.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q3: Can mutable keys ever be safe?&lt;/strong&gt;&lt;br&gt;
*&lt;em&gt;Answer: *&lt;/em&gt; &lt;code&gt;Only if fields used in hashCode()/equals() never change.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q4: Is there any advantages of using mutable key?&lt;/strong&gt;&lt;br&gt;
*&lt;em&gt;Answer: *&lt;/em&gt;  Mostly used for:&lt;br&gt;
`- object graph traversal&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;serialization frameworks&lt;/li&gt;
&lt;li&gt;proxy systems&lt;/li&gt;
&lt;li&gt;JVM internals`
&lt;em&gt;"Mutable keys are only safe if the mutable state is excluded from equals() and hashCode(). In practice, immutable or effectively immutable keys are preferred because HashMap bucket placement depends on stable hash codes."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Using StringBuilder as a HashMap Key — Why It Is Dangerous&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;"StringBuilder is a poor HashMap key because it uses reference-based equals/hashCode from Object and is mutable. Even though mutating it does not change the bucket location, the logical identity of the key changes, leading to unpredictable behavior, failed lookups, duplicate logical keys, and corrupted business semantics."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q. If I have to use a custom class as a key, what precaution I need to take it?&lt;/strong&gt;&lt;br&gt;
Using a Custom Class as a HashMap Key — Precautions You MUST Take&lt;br&gt;
This is a very common experienced-level Java interview question.&lt;br&gt;
If you use a custom object as a HashMap key, the MOST important rule is:&lt;br&gt;
&lt;code&gt;equals() and hashCode() must be implemented correctly and consistently.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Otherwise you get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;failed retrievals&lt;/li&gt;
&lt;li&gt;duplicate keys&lt;/li&gt;
&lt;li&gt;memory leaks&lt;/li&gt;
&lt;li&gt;corrupted collections &lt;/li&gt;
&lt;li&gt;unpredictable behavior
&lt;code&gt;Golden Rules for Custom Keys&lt;/code&gt;
Rule 1 — Override BOTH equals() and hashCode()
Never override only one.
&lt;em&gt;WRONG Example&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Employee&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nd"&gt;@Override&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="nf"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Object&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This breaks HashMap contract.&lt;br&gt;
Correct Rule&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;If:
a.equals(b) == true
then:
a.hashCode() MUST equal b.hashCode()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Rule 2 — Use Immutable Fields for Equality&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Fields used in:&lt;/p&gt;

&lt;p&gt;`- equals()&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hashCode()`&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;should NEVER change after insertion.&lt;br&gt;
&lt;strong&gt;Best Practice Example&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Employee&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nc"&gt;Employee&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="nd"&gt;@Override&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="nf"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Object&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="n"&gt;getClass&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getClass&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="nc"&gt;Employee&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Employee&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="nd"&gt;@Override&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;hashCode&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hashCode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;)}}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why This Is Safe because:&lt;br&gt;
&lt;code&gt;id never changes&lt;br&gt;
hashCode stable&lt;br&gt;
bucket stable&lt;/code&gt;&lt;br&gt;
HashMap works correctly forever.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Be Careful with Lombok&lt;/strong&gt;&lt;br&gt;
Dangerous Lombok Example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@Data&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Employee&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
plaintext&lt;/p&gt;

&lt;p&gt;&lt;code&gt;@Data includes ALL fields.&lt;/code&gt;&lt;br&gt;
If name changes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hashCode changes&lt;/li&gt;
&lt;li&gt;HashMap breaks
Better

&lt;code&gt;
@EqualsAndHashCode(of = "id")
&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Q. Why do we need to increase the size of the hash map and who determines when to increase it? Although we have hash collision, if we have hash collision, why do we need to increase the size?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Collisions can be handled,&lt;br&gt;
but too many collisions destroy performance.&lt;/code&gt;&lt;br&gt;
Resizing exists to maintain:&lt;br&gt;
&lt;code&gt;near O(1) lookup/insertion performance&lt;/code&gt;&lt;br&gt;
First Understand the Core Structure&lt;/p&gt;

&lt;p&gt;A HashMap internally has:&lt;code&gt;Array of buckets&lt;/code&gt;&lt;br&gt;
Example:&lt;code&gt;table[16]&lt;/code&gt;&lt;br&gt;
Each bucket may contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;empty&lt;/li&gt;
&lt;li&gt;one node&lt;/li&gt;
&lt;li&gt;linked list&lt;/li&gt;
&lt;li&gt;tree&lt;/li&gt;
&lt;li&gt;Visual Example
Suppose capacity:&lt;code&gt;16&lt;/code&gt;
Good Distribution
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Bucket 0 → A
Bucket 1 → empty
Bucket 2 → B
Bucket 3 → C
Bucket 4 → empty
Bucket 5 → D
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Very few collisions.Operations close to: &lt;code&gt;O(1)&lt;/code&gt; Fast.&lt;br&gt;
What Happens If Map Keeps Growing Without Resize?&lt;br&gt;
Suppose:&lt;br&gt;
&lt;code&gt;still only 16 buckets&lt;br&gt;
but now 10,000 entries inserted&lt;br&gt;
Internal Structure Becomes&lt;br&gt;
Bucket 0 → A → B → C → D → E → F&lt;br&gt;
Bucket 1 → G → H → I → J&lt;br&gt;
Bucket 2 → K → L → M → N → O&lt;br&gt;
...&lt;/code&gt;&lt;br&gt;
Huge collision chains.Now Lookup Becomes Slow&lt;br&gt;
Suppose searching: &lt;code&gt;O(n)&lt;/code&gt;&lt;br&gt;
instead of:&lt;code&gt;O(1)&lt;/code&gt;&lt;br&gt;
Important Point&lt;code&gt;Collision handling does NOT eliminate performance degradation.&lt;/code&gt;&lt;br&gt;
&lt;code&gt;It only prevents data loss.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Why Resize Helps, Suppose capacity increases:&lt;br&gt;
16 → 32 Now more buckets available.&lt;br&gt;
Entries redistribute.&lt;br&gt;
&lt;code&gt;BEFORE Resize&lt;br&gt;
Bucket 5&lt;br&gt;
   ↓&lt;br&gt;
A → B → C → D → E&lt;br&gt;
AFTER Resize&lt;br&gt;
Bucket 5  → A → C&lt;br&gt;
Bucket 21 → B → D → E&lt;/code&gt;&lt;br&gt;
Collision chains smaller.&lt;br&gt;
Performance improves.&lt;br&gt;
Main Goal of Resizing&lt;br&gt;
Reduce: collision density&lt;br&gt;
This keeps:&lt;br&gt;
&lt;code&gt;lookup fast&lt;br&gt;
insertion fast&lt;br&gt;
deletion fast&lt;/code&gt;&lt;br&gt;
Who Decides When Resize Happens?&lt;br&gt;
HashMap uses:&lt;br&gt;
load factor&lt;br&gt;
Default Load Factor&lt;br&gt;
0.75&lt;br&gt;
Formula&lt;br&gt;
threshold = capacity × loadFactor&lt;br&gt;
&lt;strong&gt;Bucket Index Calculation&lt;/strong&gt;&lt;br&gt;
Java internally uses:&lt;br&gt;
&lt;code&gt;index = (n - 1) &amp;amp; hash&lt;/code&gt;&lt;br&gt;
Where: n = array capacity&lt;br&gt;
hash = processed hashCode&lt;br&gt;
This is fixed.You cannot override it in normal HashMap.&lt;br&gt;
&lt;code&gt;The bucket calculation algorithm in Java HashMap is fixed internally and cannot be overridden. Java uses (capacity - 1) &amp;amp; hash for fast bucket computation. However, developers indirectly influence bucket placement through the quality of their hashCode() implementation.&lt;/code&gt;&lt;/p&gt;

</description>
      <category>hashmap</category>
      <category>java</category>
      <category>career</category>
      <category>programming</category>
    </item>
    <item>
      <title>How does HashMap work internally?</title>
      <dc:creator>Tapas Pal</dc:creator>
      <pubDate>Mon, 11 May 2026 22:11:57 +0000</pubDate>
      <link>https://forem.com/tapaspal/java-questions-on-collections-d1o</link>
      <guid>https://forem.com/tapaspal/java-questions-on-collections-d1o</guid>
      <description>&lt;p&gt;Day-1&lt;br&gt;
&lt;strong&gt;1. How does HashMap work internally?&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Answer:&lt;/em&gt;&lt;br&gt;
High-Level Internal Structure&lt;br&gt;
Internally, HashMap uses:&lt;br&gt;
&lt;code&gt;Array + LinkedList + Red-Black Tree (Java 8+)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Internal Data Structure&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;transient&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;K&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="no"&gt;V&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;[]&lt;/span&gt; &lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;K&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="no"&gt;V&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
     &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;hash&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
     &lt;span class="no"&gt;K&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
     &lt;span class="no"&gt;V&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
   &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;K&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="no"&gt;V&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is an array of buckets.&lt;br&gt;
Each bucket stores:&lt;br&gt;
&lt;code&gt;single node&lt;br&gt;
linked list&lt;br&gt;
tree nodes&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Basic Working Flow&lt;br&gt;
When you do:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;HashMap performs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Calculate hashCode()&lt;/li&gt;
&lt;li&gt;Calculate bucket index&lt;/li&gt;
&lt;li&gt;Store value in bucket&lt;/li&gt;
&lt;li&gt;Handle collision if needed&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Step-by-Step Example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;HashMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;
&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;101&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"John"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;102&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"David"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;103&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Alex"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let us understand internally what happens.&lt;br&gt;
Step 1: Create HashMap&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;HashMap&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Internally:&lt;br&gt;
&lt;code&gt;capacity = 16&lt;br&gt;
loadFactor = 0.75&lt;br&gt;
threshold = 12&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Meaning:&lt;br&gt;
resize after 12 elements&lt;br&gt;
&lt;strong&gt;Internal Array&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Initially: &lt;code&gt;table[16]&lt;/code&gt;&lt;br&gt;
Like:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fejobnqmgep1u78qw5ns8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fejobnqmgep1u78qw5ns8.png" alt=" " width="800" height="185"&gt;&lt;/a&gt;&lt;br&gt;
All buckets empty initially.&lt;br&gt;
Step 2: Insert First Entry&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;101&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"John"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;//&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;hash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;101&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="nc"&gt;Key&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;101&lt;/span&gt;&lt;span class="o"&gt;};&lt;/span&gt;
  &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"John"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="nc"&gt;Node&lt;/span&gt; &lt;span class="n"&gt;next&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Internal Working&lt;br&gt;
&lt;code&gt;A. Calculate hashCode()&lt;/code&gt;&lt;br&gt;
For Integer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;hash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hashCode&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For 101: &lt;code&gt;hash = 101&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;B. Calculate Bucket Index&lt;/strong&gt;&lt;br&gt;
Formula:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;index&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;hash&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Where: &lt;code&gt;n = capacity = 16&lt;/code&gt;&lt;br&gt;
So: &lt;code&gt;15 &amp;amp; 101&lt;/code&gt;&lt;br&gt;
Binary:&lt;br&gt;
&lt;code&gt;15  = 00001111&lt;br&gt;
101 = 01100101&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Result: 5&lt;/code&gt;&lt;br&gt;
So element stored in: &lt;code&gt;bucket 5&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Internal Structure&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;table[5] → Node(101, "John")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 3: Insert Another Entry&lt;br&gt;
&lt;code&gt;map.put(102, "David");&lt;/code&gt;&lt;br&gt;
Hash: &lt;code&gt;102&lt;/code&gt;&lt;br&gt;
Index: &lt;code&gt;15 &amp;amp; 102 = 6&lt;/code&gt;&lt;br&gt;
Stored at: &lt;code&gt;bucket 6&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Current Structure&lt;br&gt;
&lt;code&gt;table[5] → (101, John)&lt;br&gt;
table[6] → (102, David)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is a Node Internally?&lt;/strong&gt;&lt;br&gt;
Simplified internal class:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;K&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="no"&gt;V&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;hash&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="no"&gt;K&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="no"&gt;V&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;K&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="no"&gt;V&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;next&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Collision Handling&lt;br&gt;
Now suppose:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;117&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Mike"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why Collision Happens?&lt;br&gt;
Index formula: &lt;code&gt;15 &amp;amp; 117 = 5&lt;/code&gt;&lt;br&gt;
Same bucket as &lt;code&gt;101.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now What Happens?&lt;br&gt;
HashMap creates linked list.&lt;br&gt;
&lt;code&gt;table[5]&lt;br&gt;
   ↓&lt;br&gt;
(101, John)&lt;br&gt;
   ↓&lt;br&gt;
(117, Mike)&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
This is collision handling.&lt;br&gt;
&lt;strong&gt;How Retrieval Works&lt;/strong&gt;&lt;br&gt;
Suppose:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;117&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Step-by-Step Retrieval&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Step 1: Calculate hash&lt;br&gt;
hash = 117&lt;br&gt;
Step 2: Find bucket&lt;br&gt;
15 &amp;amp; 117 = 5&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Go to bucket &lt;code&gt;5&lt;/code&gt;.&lt;br&gt;
Step 3: Traverse nodes&lt;br&gt;
Bucket contains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(101, John)
(117, Mike)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;HashMap checks: &lt;code&gt;equals()&lt;/code&gt;&lt;br&gt;
until matching key found.&lt;br&gt;
Returns: &lt;code&gt;Mike&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Why equals() is Important?&lt;/strong&gt;&lt;br&gt;
Hash collision possible.&lt;br&gt;
So HashMap uses:&lt;br&gt;
`1. hashCode()&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;equals()`&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Both are mandatory.&lt;br&gt;
&lt;strong&gt;Internal Put Logic (Simplified)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="no"&gt;V&lt;/span&gt; &lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="no"&gt;K&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="no"&gt;V&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;hash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hash&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;hash&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;K&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="no"&gt;V&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;];&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;hash&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// collision handling&lt;/span&gt;
        &lt;span class="c1"&gt;// traverse linked list&lt;/span&gt;
        &lt;span class="c1"&gt;// compare using equals()&lt;/span&gt;
        &lt;span class="c1"&gt;// update or append&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Java 8 Optimization&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Before Java 8:&lt;/code&gt;&lt;br&gt;
collisions stored as linked list only&lt;br&gt;
&lt;strong&gt;Problem&lt;/strong&gt;:  &lt;code&gt;worst-case O(n)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Java 8 Improvement&lt;/code&gt;&lt;br&gt;
If bucket size becomes: &lt;code&gt;&amp;gt; 8&lt;/code&gt;&lt;br&gt;
Linked list converts to: &lt;code&gt;Red-Black Tree&lt;/code&gt;&lt;br&gt;
called: &lt;code&gt;Treeification&lt;/code&gt;&lt;br&gt;
Now complexity becomes: &lt;code&gt;O(log n)&lt;/code&gt;&lt;br&gt;
instead of: &lt;code&gt;O(n)&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Visual Example&lt;/strong&gt;&lt;br&gt;
Before Treeify&lt;br&gt;
Bucket 5:&lt;br&gt;
&lt;code&gt;A → B → C → D → E → F → G → H → I&lt;/code&gt;&lt;br&gt;
Search slow.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;After Treeify
          D
        /   \
       B     G
      / \   / \
     A  C  F  I
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Faster searching.&lt;br&gt;
&lt;strong&gt;Important Interview Point&lt;/strong&gt;&lt;br&gt;
Why Capacity Always Power of 2?&lt;br&gt;
Because index calculation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;hash&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is faster than modulo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;hash&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Load Factor Default: &lt;code&gt;0.75&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Meaning: &lt;code&gt;resize when 75% full&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rehashing&lt;/strong&gt;&lt;br&gt;
When threshold exceeded:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;New bigger array created&lt;/li&gt;
&lt;li&gt;Entries redistributed
Example:
&lt;code&gt;16 → 32&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;*&lt;em&gt;Why Immutable Keys Recommended?&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Suppose:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Employee&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;If name changes:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hashCode changes&lt;/li&gt;
&lt;li&gt;retrieval fails&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Very dangerous.&lt;br&gt;
That is why:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;String&lt;/li&gt;
&lt;li&gt;Integer&lt;/li&gt;
&lt;li&gt;immutable objects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;recommended as keys.&lt;/p&gt;

&lt;p&gt;**Real Interview Example&lt;br&gt;
**Bad Mutable Key&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Employee&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="nc"&gt;Employee&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="nd"&gt;@Override&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;hashCode&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hashCode&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="nd"&gt;@Override&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="nf"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Object&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;Employee&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Employee&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;obj&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;equals&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Problem&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Employee&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Employee&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"John"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Developer"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"David"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// FAILS&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Because:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;bucket changed&lt;/li&gt;
&lt;li&gt;object unreachable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Time Complexity&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;Operation Average Worst&lt;br&gt;
put O(1)    O(n)&lt;br&gt;
get O(1)    O(n)&lt;br&gt;
remove  O(1)    O(n)&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Java 8 treeification improves worst case:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;O(log n)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Internal Hash Function&lt;br&gt;
Java improves hash distribution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;hash&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Object&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;h&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
            &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hashCode&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This avoids poor bucket distribution.&lt;br&gt;
*&lt;em&gt;Null Handling *&lt;/em&gt;&lt;br&gt;
HashMap allows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one null key&lt;/li&gt;
&lt;li&gt;multiple null values&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Null key always stored in:&lt;/em&gt; &lt;code&gt;bucket 0&lt;/code&gt;&lt;br&gt;
&lt;code&gt;Important Differences&lt;br&gt;
Feature   Thread-safe Null-allowed Performance&lt;br&gt;
HashMap   No           Yes.         Faster&lt;br&gt;
Hashtable Yes          No           Slower&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>interview</category>
      <category>beginners</category>
      <category>hashmap</category>
    </item>
  </channel>
</rss>
