<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>String-Builders on avni.sh</title>
    <link>http://www.avni.sh/tags/string-builders/</link>
    <description>Recent content in String-Builders on avni.sh</description>
    <image>
      <title>avni.sh</title>
      <url>http://www.avni.sh/cover.webp</url>
      <link>http://www.avni.sh/cover.webp</link>
    </image>
    <generator>Hugo -- 0.146.0</generator>
    <language>en</language>
    <lastBuildDate>Fri, 29 Sep 2023 00:00:00 +0000</lastBuildDate>
    <atom:link href="http://www.avni.sh/tags/string-builders/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Arrays, Strings, and HashMaps</title>
      <link>http://www.avni.sh/posts/computer-science/interview-preparation/arrays-strings-hashmaps/</link>
      <pubDate>Fri, 29 Sep 2023 00:00:00 +0000</pubDate>
      <guid>http://www.avni.sh/posts/computer-science/interview-preparation/arrays-strings-hashmaps/</guid>
      <description>Understanding basic data structures like arrays, strings, and hashmaps</description>
      <content:encoded><![CDATA[<p>Data structures like arrays, strings, and hashmaps are available by default in most programming languages. They facilitate storage of large amounts of data in an efficient format which makes it easier (and sometimes relatively faster) to access during runtime.</p>
<h1 id="arrays">Arrays</h1>
<p align="center"><img src="arrays.png" alt="Array"></p>
<p>An array is a sequential store of data (referred to as <em>elements</em>).</p>
<p>In languages like Python, an array can store elements with multiple data types, like, <code>[1, &quot;Hello, World&quot;, True]</code> but for languages like Go, C++, and Java an array can store elements of a singular data type.</p>
<h2 id="iterating-over-an-array-using-indexes">Iterating over an array using indexes</h2>
<p>An <strong>index</strong> is assigned to each element based on its location in the array. The value stored at the <code>index</code> could be extracted using <code>[ ]</code> brackets with the array&rsquo;s variable name, for example, <code>arrayExample[index]</code>.</p>
<p>We can iterate over values stored in an array by defining a loop starting from <code>0</code> (index of the first element in the <a href="/posts/go/go-programming-language/" target="_blank">Go Programming Language</a>) till <code>len(arrayExample)-1</code> (index of last element).</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">(){</span>
</span></span><span class="line"><span class="cl">  <span class="nx">arrayExample</span> <span class="o">:=</span> <span class="p">[]</span><span class="kt">int</span><span class="p">{</span><span class="mi">12</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">3123</span><span class="p">,</span> <span class="mi">78</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="k">for</span> <span class="nx">i</span><span class="o">:=</span><span class="mi">0</span><span class="p">;</span><span class="nx">i</span><span class="p">&lt;</span><span class="nb">len</span><span class="p">(</span><span class="nx">arrayExample</span><span class="p">);</span><span class="nx">i</span><span class="o">++</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Element at index&#34;</span><span class="p">,</span> <span class="nx">i</span><span class="p">,</span> <span class="s">&#34;is:&#34;</span><span class="p">,</span> <span class="nx">arrayExample</span><span class="p">[</span><span class="nx">i</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Element at index 0 is: 12</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Element at index 1 is: 3</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Element at index 2 is: 2</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Element at index 3 is: 1</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Element at index 4 is: 3123</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Element at index 5 is: 78</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>The <a href="/posts/computer-science/interview-preparation/time-complexity/" target="_blank">time complexity</a> of this loop is $O(n)$ where $n$ is the size of <code>arrayExample</code>.</p>
<h2 id="nested-arrays">Nested Arrays</h2>
<p>A simple array will store data in just one dimension but we can nest arrays to store multidimensional data like <em>matrices</em>.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="nx">nestedArrayExample</span> <span class="o">:=</span> <span class="p">[][]</span><span class="kt">int</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">                        <span class="p">{</span><span class="mi">1</span><span class="p">,</span> <span class="mi">123</span><span class="p">,</span> <span class="mi">123</span><span class="p">,</span> <span class="mi">234</span><span class="p">},</span>
</span></span><span class="line"><span class="cl">                        <span class="p">{</span><span class="mi">456</span><span class="p">,</span> <span class="mi">345</span><span class="p">,</span> <span class="mi">3457</span><span class="p">,</span> <span class="mi">5</span><span class="p">},</span>
</span></span><span class="line"><span class="cl">                        <span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>To iterate over the elements in a nested array we have to define multiple nested loops.
The time complexity of fetching all the elements from a nested array will be $O(n^m)$ where $n$ is the size of individual arrays and $m$ is the order of nesting (to iterate over all the elements we have to define $m$ nested loops each of length $n$).</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">(){</span>
</span></span><span class="line"><span class="cl">  <span class="nx">nestedArrayExample</span> <span class="o">:=</span> <span class="p">[][]</span><span class="kt">int</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span><span class="mi">1</span><span class="p">,</span> <span class="mi">123</span><span class="p">,</span> <span class="mi">123</span><span class="p">,</span> <span class="mi">234</span><span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span><span class="mi">456</span><span class="p">,</span> <span class="mi">345</span><span class="p">,</span> <span class="mi">3457</span><span class="p">,</span> <span class="mi">5</span><span class="p">},</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="k">for</span> <span class="nx">i</span><span class="o">:=</span><span class="mi">0</span><span class="p">;</span><span class="nx">i</span><span class="p">&lt;</span><span class="nb">len</span><span class="p">(</span><span class="nx">nestedArrayExample</span><span class="p">);</span><span class="nx">i</span><span class="o">++</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Nested Array at index:&#34;</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="nx">j</span><span class="o">:=</span><span class="mi">0</span><span class="p">;</span><span class="nx">j</span><span class="p">&lt;</span><span class="nb">len</span><span class="p">(</span><span class="nx">nestedArrayExample</span><span class="p">[</span><span class="nx">i</span><span class="p">]);</span><span class="nx">j</span><span class="o">++</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;Element at index[%d][%d]: %d \n&#34;</span><span class="p">,</span> <span class="nx">i</span><span class="p">,</span> <span class="nx">j</span><span class="p">,</span> <span class="nx">nestedArrayExample</span><span class="p">[</span><span class="nx">i</span><span class="p">][</span><span class="nx">j</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Nested Array at index: 0</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Element at index[0][0]: 1 </span>
</span></span><span class="line"><span class="cl"><span class="c1">// Element at index[0][1]: 123 </span>
</span></span><span class="line"><span class="cl"><span class="c1">// Element at index[0][2]: 123 </span>
</span></span><span class="line"><span class="cl"><span class="c1">// Element at index[0][3]: 234 </span>
</span></span><span class="line"><span class="cl"><span class="c1">// Nested Array at index: 1</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Element at index[1][0]: 456 </span>
</span></span><span class="line"><span class="cl"><span class="c1">// Element at index[1][1]: 345 </span>
</span></span><span class="line"><span class="cl"><span class="c1">// Element at index[1][2]: 3457 </span>
</span></span><span class="line"><span class="cl"><span class="c1">// Element at index[1][3]: 5</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>In the example above an array is nested inside another array ($m=2$), to traverse it we have to define a loop nested inside another loop. Thus, the time complexity of the program is $O(n^2)$.</p>
<h2 id="arraylist">ArrayList</h2>
<p align="center"><img src="arraylist.png" alt="ArrayList"></p>
<p><strong>ArrayList</strong> data structure is similar to an array but it doubles in size when it runs out of space. It is ideal for scenarios with limited memory space for program execution.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span><span class="lnt">49
</span><span class="lnt">50
</span><span class="lnt">51
</span><span class="lnt">52
</span><span class="lnt">53
</span><span class="lnt">54
</span><span class="lnt">55
</span><span class="lnt">56
</span><span class="lnt">57
</span><span class="lnt">58
</span><span class="lnt">59
</span><span class="lnt">60
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">type</span> <span class="nx">ArrayList</span> <span class="kd">struct</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nx">capacity</span> <span class="kt">int</span>
</span></span><span class="line"><span class="cl">  <span class="nx">array</span> <span class="p">[]</span><span class="kt">int</span> 
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">al</span> <span class="o">*</span><span class="nx">ArrayList</span><span class="p">)</span> <span class="nf">insert</span><span class="p">(</span><span class="nx">x</span> <span class="kt">int</span><span class="p">){</span>
</span></span><span class="line"><span class="cl">  <span class="k">if</span><span class="p">(</span><span class="nx">al</span><span class="p">.</span><span class="nx">capacity</span><span class="o">==</span><span class="mi">0</span><span class="p">){</span>
</span></span><span class="line"><span class="cl">    <span class="c1">// If ArrayList is at full capacity</span>
</span></span><span class="line"><span class="cl">    <span class="c1">// then create a new temporary ArrayList</span>
</span></span><span class="line"><span class="cl">    <span class="c1">// twice the size of the existing one</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Resizing ArrayList&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="kd">var</span> <span class="nx">newArray</span> <span class="p">[]</span><span class="kt">int</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// Copy all the elements from existing</span>
</span></span><span class="line"><span class="cl">    <span class="c1">// ArrayList to the new ArrayList</span>
</span></span><span class="line"><span class="cl">	<span class="c1">// This will take O(n) time</span>
</span></span><span class="line"><span class="cl">	<span class="c1">// where n is the size of al.array</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="nx">i</span><span class="o">:=</span><span class="mi">0</span><span class="p">;</span><span class="nx">i</span><span class="p">&lt;</span><span class="nb">len</span><span class="p">(</span><span class="nx">al</span><span class="p">.</span><span class="nx">array</span><span class="p">);</span><span class="nx">i</span><span class="o">++</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nx">newArray</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">newArray</span><span class="p">,</span> <span class="nx">al</span><span class="p">.</span><span class="nx">array</span><span class="p">[</span><span class="nx">i</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// Insert the element in the new ArrayList</span>
</span></span><span class="line"><span class="cl">    <span class="nx">newArray</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">newArray</span><span class="p">,</span> <span class="nx">x</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// Increase the capacity of ArrayList</span>
</span></span><span class="line"><span class="cl">    <span class="nx">al</span><span class="p">.</span><span class="nx">capacity</span> <span class="p">=</span> <span class="nb">len</span><span class="p">(</span><span class="nx">al</span><span class="p">.</span><span class="nx">array</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// Replace the old ArrayList with a new one</span>
</span></span><span class="line"><span class="cl">    <span class="nx">al</span><span class="p">.</span><span class="nx">array</span> <span class="p">=</span> <span class="nx">newArray</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="p">}</span> <span class="k">else</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// Insert the element into the existing ArrayList</span>
</span></span><span class="line"><span class="cl">    <span class="nx">al</span><span class="p">.</span><span class="nx">array</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">al</span><span class="p">.</span><span class="nx">array</span><span class="p">,</span> <span class="nx">x</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">// Decrement the capacity by 1</span>
</span></span><span class="line"><span class="cl">    <span class="nx">al</span><span class="p">.</span><span class="nx">capacity</span> <span class="o">-=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">(){</span>
</span></span><span class="line"><span class="cl">  <span class="nx">al</span> <span class="o">:=</span> <span class="nx">ArrayList</span><span class="p">{</span><span class="nx">capacity</span><span class="p">:</span><span class="mi">1</span><span class="p">,</span> <span class="nx">array</span><span class="p">:</span> <span class="p">[]</span><span class="kt">int</span><span class="p">{}}</span> 
</span></span><span class="line"><span class="cl">  <span class="nx">al</span><span class="p">.</span><span class="nf">insert</span><span class="p">(</span><span class="mi">12</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="nx">al</span><span class="p">.</span><span class="nf">insert</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="nx">al</span><span class="p">.</span><span class="nf">insert</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="nx">al</span><span class="p">.</span><span class="nf">insert</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="nx">al</span><span class="p">.</span><span class="nf">insert</span><span class="p">(</span><span class="mi">3123</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;ArrayList after all elements are inserted:&#34;</span><span class="p">,</span> <span class="nx">al</span><span class="p">.</span><span class="nx">array</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Resizing ArrayList</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Resizing ArrayList</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Resizing ArrayList</span>
</span></span><span class="line"><span class="cl"><span class="c1">// ArrayList after all elements are inserted: [12 3 2 1 3123]</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>The time complexity of inserting a new element in ArrayList is assumed to be $O(1)$, but if the list is already at max capacity then the time complexity will be $O(n)$ where $n$ is the number of existing elements.</p>
<h1 id="strings">Strings</h1>
<p>A string is like an array of characters. It is defined as a separate datatype, but most array operations like loop, slice, and indexing are interoperable.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">(){</span>
</span></span><span class="line"><span class="cl">  <span class="nx">stringExample</span> <span class="o">:=</span> <span class="s">&#34;Hello, World&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;First character is:&#34;</span><span class="p">,</span> <span class="nx">stringExample</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">  <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Last character is:&#34;</span><span class="p">,</span> <span class="nx">stringExample</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="nx">stringExample</span><span class="p">)</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">  <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Slice of string:&#34;</span><span class="p">,</span> <span class="nx">stringExample</span><span class="p">[</span><span class="mi">2</span><span class="p">:</span><span class="mi">4</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="k">for</span> <span class="nx">i</span><span class="o">:=</span><span class="mi">0</span><span class="p">;</span><span class="nx">i</span><span class="p">&lt;</span><span class="nb">len</span><span class="p">(</span><span class="nx">stringExample</span><span class="p">);</span><span class="nx">i</span><span class="o">++</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;Character at index: %d is: %c \n&#34;</span><span class="p">,</span> <span class="nx">i</span><span class="p">,</span> <span class="nx">stringExample</span><span class="p">[</span><span class="nx">i</span><span class="p">])</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// First character is: H</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Last character is: d</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Slice of string: ll</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Character at index: 0 is: H </span>
</span></span><span class="line"><span class="cl"><span class="c1">// Character at index: 1 is: e </span>
</span></span><span class="line"><span class="cl"><span class="c1">// Character at index: 2 is: l </span>
</span></span><span class="line"><span class="cl"><span class="c1">// Character at index: 3 is: l </span>
</span></span><span class="line"><span class="cl"><span class="c1">// Character at index: 4 is: o </span>
</span></span><span class="line"><span class="cl"><span class="c1">// Character at index: 5 is: , </span>
</span></span><span class="line"><span class="cl"><span class="c1">// Character at index: 6 is:   </span>
</span></span><span class="line"><span class="cl"><span class="c1">// Character at index: 7 is: W </span>
</span></span><span class="line"><span class="cl"><span class="c1">// Character at index: 8 is: o </span>
</span></span><span class="line"><span class="cl"><span class="c1">// Character at index: 9 is: r </span>
</span></span><span class="line"><span class="cl"><span class="c1">// Character at index: 10 is: l </span>
</span></span><span class="line"><span class="cl"><span class="c1">// Character at index: 11 is: d</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="concatenation-of-strings">Concatenation of Strings</h2>
<p align="center"><img src="strings.png" alt="String Concatenation"></p>
<p>A program that concatenates two strings of size $m$ and $n$, has time complexity $O(m + n)$ or $O(2n)$ if both strings are of equal length.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;strings&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">concat</span><span class="p">(</span><span class="nx">stringA</span> <span class="kt">string</span><span class="p">,</span> <span class="nx">stringB</span> <span class="kt">string</span><span class="p">)(</span><span class="kt">string</span><span class="p">){</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c1">// Create a new list of strings</span>
</span></span><span class="line"><span class="cl">  <span class="c1">// to store the concatenated string</span>
</span></span><span class="line"><span class="cl">  <span class="kd">var</span> <span class="nx">newString</span> <span class="p">[]</span><span class="kt">string</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c1">// Copy stringA</span>
</span></span><span class="line"><span class="cl">  <span class="k">for</span> <span class="nx">i</span><span class="o">:=</span><span class="mi">0</span><span class="p">;</span><span class="nx">i</span><span class="p">&lt;</span><span class="nb">len</span><span class="p">(</span><span class="nx">stringA</span><span class="p">);</span><span class="nx">i</span><span class="o">++</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nx">newString</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">newString</span><span class="p">,</span> <span class="nb">string</span><span class="p">(</span><span class="nx">stringA</span><span class="p">[</span><span class="nx">i</span><span class="p">]))</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c1">// Copy stringB</span>
</span></span><span class="line"><span class="cl">  <span class="k">for</span> <span class="nx">j</span><span class="o">:=</span><span class="mi">0</span><span class="p">;</span><span class="nx">j</span><span class="p">&lt;</span><span class="nb">len</span><span class="p">(</span><span class="nx">stringB</span><span class="p">);</span><span class="nx">j</span><span class="o">++</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nx">newString</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">newString</span><span class="p">,</span> <span class="nb">string</span><span class="p">(</span><span class="nx">stringB</span><span class="p">[</span><span class="nx">j</span><span class="p">]))</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c1">// Join the list of strings to create a new string</span>
</span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="nx">strings</span><span class="p">.</span><span class="nf">Join</span><span class="p">(</span><span class="nx">newString</span><span class="p">,</span> <span class="s">&#34;&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">(){</span>
</span></span><span class="line"><span class="cl">  <span class="nx">stringA</span> <span class="o">:=</span> <span class="s">&#34;Hello&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="nx">stringB</span> <span class="o">:=</span> <span class="s">&#34;World&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="nx">fmt</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">&#34;Concatenation of %s and %s is: %s \n&#34;</span><span class="p">,</span> <span class="nx">stringA</span><span class="p">,</span> <span class="nx">stringB</span><span class="p">,</span> 
</span></span><span class="line"><span class="cl">                <span class="nf">concat</span><span class="p">(</span><span class="nx">stringA</span><span class="p">,</span> <span class="nx">stringB</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Concatenation of Hello and World is: HelloWorld </span>
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="stringbuilder">StringBuilder</h2>
<p>Using <strong>StringBuilder</strong> (a dynamically sized array similar to ArrayList) we can reduce the time complexity of operations performed on a string.</p>
<p>Upon initialization, the StringBuilder will load the characters of a string into an array. If we have to concatenate another string of length $n$, the array will be resized with time complexity $O(n)$. Once all operations are performed, the array in StringBuilder can be converted back to a string.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span><span class="lnt">49
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="s">&#34;strings&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">type</span> <span class="nx">StringBuilder</span> <span class="kd">struct</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nx">array</span> <span class="p">[]</span><span class="kt">string</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">sb</span> <span class="o">*</span><span class="nx">StringBuilder</span><span class="p">)</span> <span class="nf">load</span><span class="p">(</span><span class="nx">value</span> <span class="kt">string</span><span class="p">){</span>
</span></span><span class="line"><span class="cl">  <span class="c1">// We assume the time complexity of this function</span>
</span></span><span class="line"><span class="cl">  <span class="c1">// to be O(1)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="nx">sb</span><span class="p">.</span><span class="nx">array</span> <span class="p">=</span> <span class="nx">strings</span><span class="p">.</span><span class="nf">Split</span><span class="p">(</span><span class="nx">value</span><span class="p">,</span> <span class="s">&#34;&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">sb</span> <span class="o">*</span><span class="nx">StringBuilder</span><span class="p">)</span> <span class="nf">concat</span><span class="p">(</span><span class="nx">value</span> <span class="kt">string</span><span class="p">){</span>
</span></span><span class="line"><span class="cl">  <span class="c1">// Time complexity of concatenating a string of</span>
</span></span><span class="line"><span class="cl">  <span class="c1">// length m will be O(m)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="k">for</span> <span class="nx">i</span><span class="o">:=</span><span class="mi">0</span><span class="p">;</span><span class="nx">i</span><span class="p">&lt;</span><span class="nb">len</span><span class="p">(</span><span class="nx">value</span><span class="p">);</span><span class="nx">i</span><span class="o">++</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nx">sb</span><span class="p">.</span><span class="nx">array</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">sb</span><span class="p">.</span><span class="nx">array</span><span class="p">,</span> <span class="nb">string</span><span class="p">(</span><span class="nx">value</span><span class="p">[</span><span class="nx">i</span><span class="p">]))</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">sb</span> <span class="o">*</span><span class="nx">StringBuilder</span><span class="p">)</span> <span class="nf">unload</span><span class="p">()(</span><span class="kt">string</span><span class="p">){</span>
</span></span><span class="line"><span class="cl">  <span class="c1">// Just like load() method the time complexity of</span>
</span></span><span class="line"><span class="cl">  <span class="c1">// unloading an array to string will be assumed as O(1)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="nx">strings</span><span class="p">.</span><span class="nf">Join</span><span class="p">(</span><span class="nx">sb</span><span class="p">.</span><span class="nx">array</span><span class="p">,</span> <span class="s">&#34;&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">(){</span>
</span></span><span class="line"><span class="cl">  <span class="nx">sb</span> <span class="o">:=</span> <span class="nx">StringBuilder</span><span class="p">{</span><span class="nx">array</span><span class="p">:</span> <span class="p">[]</span><span class="kt">string</span><span class="p">{}}</span>
</span></span><span class="line"><span class="cl">  <span class="nx">sb</span><span class="p">.</span><span class="nf">load</span><span class="p">(</span><span class="s">&#34;Hello&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Instance of StringBuilder:&#34;</span><span class="p">,</span> <span class="nx">sb</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="nx">sb</span><span class="p">.</span><span class="nf">concat</span><span class="p">(</span><span class="s">&#34;World&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;StringBuilder array after concatenation:&#34;</span><span class="p">,</span> <span class="nx">sb</span><span class="p">.</span><span class="nx">array</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Unloaded String:&#34;</span><span class="p">,</span> <span class="nx">sb</span><span class="p">.</span><span class="nf">unload</span><span class="p">())</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Instance of StringBuilder: {[H e l l o]}</span>
</span></span><span class="line"><span class="cl"><span class="c1">// StringBuilder array after concatenation: [H e l l o W o r l d]</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Unloaded String: HelloWorld</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h1 id="hashmaps">HashMaps</h1>
<p align="center"><img src="hashtables.png" alt="HashMap"></p>
<p>A <strong>HashMap</strong> is a data structure that stores values mapped to keys. It is generally used to store values that require frequent access, as the time complexity of accessing/searching an element in HashMap is $O(1)$.</p>
<p>The <a href="/posts/go/go-programming-language/#maps" target="_blank">Map</a> in Go, is an implementation of the HashMap data structure.</p>
<h2 id="hash-function">Hash Function</h2>
<p>While inserting a value in HashMap, a <strong>Hash Function</strong> calculates a hash from the input value and allocates a location to store the value.</p>
<p>A HashMap collision occurs when two values have the same hash or they are allocated the same storage location. In the case of collision, multiple values could be stored in the same location using an array or <a href="/posts/computer-science/interview-preparation/linked-lists" target="_blank">LinkedList</a>.</p>
<p>An ideal hash function will produce the least collisions, resulting in $O(1)$ lookup time. But in the worst-case scenario (all values are inserted in the same location) the lookup time will increase to $O(n)$, same as an array.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span><span class="lnt">49
</span><span class="lnt">50
</span><span class="lnt">51
</span><span class="lnt">52
</span><span class="lnt">53
</span><span class="lnt">54
</span><span class="lnt">55
</span><span class="lnt">56
</span><span class="lnt">57
</span><span class="lnt">58
</span><span class="lnt">59
</span><span class="lnt">60
</span><span class="lnt">61
</span><span class="lnt">62
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-Go" data-lang="Go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="s">&#34;fmt&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">type</span> <span class="nx">HashMap</span> <span class="kd">struct</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nx">table</span> <span class="kd">map</span><span class="p">[</span><span class="kt">int</span><span class="p">][]</span><span class="kt">int</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">calculateHash</span><span class="p">(</span><span class="nx">value</span> <span class="kt">int</span><span class="p">)(</span><span class="kt">int</span><span class="p">){</span>
</span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="nx">value</span><span class="o">%</span><span class="mi">10</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">hm</span> <span class="o">*</span><span class="nx">HashMap</span><span class="p">)</span> <span class="nf">insert</span><span class="p">(</span><span class="nx">insertValue</span> <span class="kt">int</span><span class="p">){</span>
</span></span><span class="line"><span class="cl">  <span class="c1">// Calculate hash value from insertValue</span>
</span></span><span class="line"><span class="cl">  <span class="nx">hash</span> <span class="o">:=</span> <span class="nf">calculateHash</span><span class="p">(</span><span class="nx">insertValue</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c1">// Append the insertValue to the array </span>
</span></span><span class="line"><span class="cl">  <span class="c1">// present at &#34;hash&#34; key</span>
</span></span><span class="line"><span class="cl">  <span class="nx">hm</span><span class="p">.</span><span class="nx">table</span><span class="p">[</span><span class="nx">hash</span><span class="p">]</span> <span class="p">=</span> <span class="nb">append</span><span class="p">(</span><span class="nx">hm</span><span class="p">.</span><span class="nx">table</span><span class="p">[</span><span class="nx">hash</span><span class="p">],</span> <span class="nx">insertValue</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="p">(</span><span class="nx">hm</span> <span class="o">*</span><span class="nx">HashMap</span><span class="p">)</span> <span class="nf">search</span><span class="p">(</span><span class="nx">searchValue</span> <span class="kt">int</span><span class="p">)(</span><span class="kt">bool</span><span class="p">){</span>
</span></span><span class="line"><span class="cl">  
</span></span><span class="line"><span class="cl">  <span class="c1">// Narrow down the search to the array stored </span>
</span></span><span class="line"><span class="cl">  <span class="c1">// at the &#34;hash&#34; key</span>
</span></span><span class="line"><span class="cl">  <span class="nx">searchSpace</span> <span class="o">:=</span> <span class="nx">hm</span><span class="p">.</span><span class="nx">table</span><span class="p">[</span><span class="nf">calculateHash</span><span class="p">(</span><span class="nx">searchValue</span><span class="p">)]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="c1">// Search for searchValue in the array stored </span>
</span></span><span class="line"><span class="cl">  <span class="c1">// at &#34;hash&#34; key</span>
</span></span><span class="line"><span class="cl">  <span class="k">for</span> <span class="nx">i</span><span class="o">:=</span><span class="mi">0</span><span class="p">;</span><span class="nx">i</span><span class="p">&lt;</span><span class="nb">len</span><span class="p">(</span><span class="nx">searchSpace</span><span class="p">);</span><span class="nx">i</span><span class="o">++</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="nx">searchValue</span> <span class="o">==</span> <span class="nx">searchSpace</span><span class="p">[</span><span class="nx">i</span><span class="p">]){</span>
</span></span><span class="line"><span class="cl">      <span class="k">return</span> <span class="kc">true</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="kc">false</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">(){</span>
</span></span><span class="line"><span class="cl">  <span class="nx">hm</span> <span class="o">:=</span> <span class="nx">HashMap</span><span class="p">{</span><span class="nx">table</span><span class="p">:</span> <span class="nb">make</span><span class="p">(</span><span class="kd">map</span><span class="p">[</span><span class="kt">int</span><span class="p">][]</span><span class="kt">int</span><span class="p">)}</span>
</span></span><span class="line"><span class="cl">  <span class="nx">hm</span><span class="p">.</span><span class="nf">insert</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="nx">hm</span><span class="p">.</span><span class="nf">insert</span><span class="p">(</span><span class="mi">12</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="nx">hm</span><span class="p">.</span><span class="nf">insert</span><span class="p">(</span><span class="mi">23</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="nx">hm</span><span class="p">.</span><span class="nf">insert</span><span class="p">(</span><span class="mi">65</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="nx">hm</span><span class="p">.</span><span class="nf">insert</span><span class="p">(</span><span class="mi">67</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="nx">hm</span><span class="p">.</span><span class="nf">insert</span><span class="p">(</span><span class="mi">55</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;HashMap:&#34;</span><span class="p">,</span> <span class="nx">hm</span><span class="p">.</span><span class="nx">table</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="nx">searchValue1</span> <span class="o">:=</span> <span class="mi">55</span>
</span></span><span class="line"><span class="cl">  <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Searching for&#34;</span><span class="p">,</span> <span class="nx">searchValue1</span><span class="p">,</span> <span class="s">&#34;in HashMap:&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                <span class="nx">hm</span><span class="p">.</span><span class="nf">search</span><span class="p">(</span><span class="nx">searchValue1</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="nx">searchValue2</span> <span class="o">:=</span> <span class="mi">2</span>
</span></span><span class="line"><span class="cl">  <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">&#34;Searching for&#34;</span><span class="p">,</span> <span class="nx">searchValue2</span><span class="p">,</span> <span class="s">&#34;in HashMap:&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                <span class="nx">hm</span><span class="p">.</span><span class="nf">search</span><span class="p">(</span><span class="nx">searchValue2</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Output</span>
</span></span><span class="line"><span class="cl"><span class="c1">// HashMap: map[1:[1] 2:[12] 3:[23] 5:[65 55] 7:[67]]</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Searching for 55 in HashMap: true</span>
</span></span><span class="line"><span class="cl"><span class="c1">// Searching for 2 in HashMap: false</span>
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<p>Thank you for taking the time to read this blog post! Have questions, feedback or want to discuss this topic? Feel free to reach out at <a href="mailto:blog@avni.sh"><a href="mailto:blog@avni.sh">blog@avni.sh</a></a>.</p>
<p>If you found this content valuable and would like to stay updated with my latest posts, consider subscribing to my <a href="https://www.avni.sh/index.xml" target="_blank">RSS Feed</a>.</p>
<h1 id="resources">Resources</h1>
<p><a href="https://www.freecodecamp.org/news/hash-tables/" target="_blank">Hash Table Explained: What it Is and How to Implement It</a><br>
<a href="https://www.freecodecamp.org/news/java-list-tutorial-util-list-api-example/" target="_blank">Java List Methods Tutorial – Util List API Example</a><br>
<a href="https://www.freecodecamp.org/news/efficient-string-building-in-javascript/" target="_blank">How to Work with Strings in JavaScript – Tips for Efficient String Concatenation</a></p>
]]></content:encoded>
    </item>
  </channel>
</rss>
