This commit is contained in:
krahets
2024-04-11 01:11:27 +08:00
parent a4dec11e8e
commit ba0bcfa7a9
94 changed files with 2561 additions and 1998 deletions

View File

@@ -5198,7 +5198,7 @@
<div class="highlight"><span class="filename">array_hash_map.kt</span><pre><span></span><code><a id="__codelineno-40-1" name="__codelineno-40-1" href="#__codelineno-40-1"></a><span class="cm">/* 键值对 */</span>
<a id="__codelineno-40-2" name="__codelineno-40-2" href="#__codelineno-40-2"></a><span class="kd">class</span><span class="w"> </span><span class="nc">Pair</span><span class="p">(</span>
<a id="__codelineno-40-3" name="__codelineno-40-3" href="#__codelineno-40-3"></a><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">key</span><span class="p">:</span><span class="w"> </span><span class="kt">Int</span><span class="p">,</span>
<a id="__codelineno-40-4" name="__codelineno-40-4" href="#__codelineno-40-4"></a><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">value</span><span class="p">:</span><span class="w"> </span><span class="kt">String</span>
<a id="__codelineno-40-4" name="__codelineno-40-4" href="#__codelineno-40-4"></a><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nv">_val</span><span class="p">:</span><span class="w"> </span><span class="kt">String</span>
<a id="__codelineno-40-5" name="__codelineno-40-5" href="#__codelineno-40-5"></a><span class="p">)</span>
<a id="__codelineno-40-6" name="__codelineno-40-6" href="#__codelineno-40-6"></a>
<a id="__codelineno-40-7" name="__codelineno-40-7" href="#__codelineno-40-7"></a><span class="cm">/* 基于数组实现的哈希表 */</span>
@@ -5216,12 +5216,12 @@
<a id="__codelineno-40-19" name="__codelineno-40-19" href="#__codelineno-40-19"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">get</span><span class="p">(</span><span class="n">key</span><span class="p">:</span><span class="w"> </span><span class="kt">Int</span><span class="p">):</span><span class="w"> </span><span class="kt">String?</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-20" name="__codelineno-40-20" href="#__codelineno-40-20"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">index</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">hashFunc</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
<a id="__codelineno-40-21" name="__codelineno-40-21" href="#__codelineno-40-21"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">pair</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">buckets</span><span class="o">[</span><span class="n">index</span><span class="o">]</span><span class="w"> </span><span class="o">?:</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">null</span>
<a id="__codelineno-40-22" name="__codelineno-40-22" href="#__codelineno-40-22"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">pair</span><span class="p">.</span><span class="na">value</span>
<a id="__codelineno-40-22" name="__codelineno-40-22" href="#__codelineno-40-22"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">pair</span><span class="p">.</span><span class="na">_val</span>
<a id="__codelineno-40-23" name="__codelineno-40-23" href="#__codelineno-40-23"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-24" name="__codelineno-40-24" href="#__codelineno-40-24"></a>
<a id="__codelineno-40-25" name="__codelineno-40-25" href="#__codelineno-40-25"></a><span class="w"> </span><span class="cm">/* 添加操作 */</span>
<a id="__codelineno-40-26" name="__codelineno-40-26" href="#__codelineno-40-26"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">put</span><span class="p">(</span><span class="n">key</span><span class="p">:</span><span class="w"> </span><span class="kt">Int</span><span class="p">,</span><span class="w"> </span><span class="n">value</span><span class="p">:</span><span class="w"> </span><span class="kt">String</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-27" name="__codelineno-40-27" href="#__codelineno-40-27"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">pair</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Pair</span><span class="p">(</span><span class="n">key</span><span class="p">,</span><span class="w"> </span><span class="n">value</span><span class="p">)</span>
<a id="__codelineno-40-26" name="__codelineno-40-26" href="#__codelineno-40-26"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">put</span><span class="p">(</span><span class="n">key</span><span class="p">:</span><span class="w"> </span><span class="kt">Int</span><span class="p">,</span><span class="w"> </span><span class="n">_val</span><span class="p">:</span><span class="w"> </span><span class="kt">String</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-27" name="__codelineno-40-27" href="#__codelineno-40-27"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">pair</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Pair</span><span class="p">(</span><span class="n">key</span><span class="p">,</span><span class="w"> </span><span class="n">_val</span><span class="p">)</span>
<a id="__codelineno-40-28" name="__codelineno-40-28" href="#__codelineno-40-28"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">index</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">hashFunc</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
<a id="__codelineno-40-29" name="__codelineno-40-29" href="#__codelineno-40-29"></a><span class="w"> </span><span class="n">buckets</span><span class="o">[</span><span class="n">index</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pair</span>
<a id="__codelineno-40-30" name="__codelineno-40-30" href="#__codelineno-40-30"></a><span class="w"> </span><span class="p">}</span>
@@ -5257,7 +5257,7 @@
<a id="__codelineno-40-60" name="__codelineno-40-60" href="#__codelineno-40-60"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">valueSet</span><span class="p">():</span><span class="w"> </span><span class="n">MutableList</span><span class="o">&lt;</span><span class="kt">String</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-61" name="__codelineno-40-61" href="#__codelineno-40-61"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">valueSet</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">mutableListOf</span><span class="o">&lt;</span><span class="kt">String</span><span class="o">&gt;</span><span class="p">()</span>
<a id="__codelineno-40-62" name="__codelineno-40-62" href="#__codelineno-40-62"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">pair</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">buckets</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-63" name="__codelineno-40-63" href="#__codelineno-40-63"></a><span class="w"> </span><span class="n">pair</span><span class="o">?.</span><span class="na">let</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">valueSet</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="nb">it</span><span class="p">.</span><span class="na">value</span><span class="p">)</span><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-63" name="__codelineno-40-63" href="#__codelineno-40-63"></a><span class="w"> </span><span class="n">pair</span><span class="o">?.</span><span class="na">let</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">valueSet</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="nb">it</span><span class="p">.</span><span class="na">_val</span><span class="p">)</span><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-64" name="__codelineno-40-64" href="#__codelineno-40-64"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-65" name="__codelineno-40-65" href="#__codelineno-40-65"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">valueSet</span>
<a id="__codelineno-40-66" name="__codelineno-40-66" href="#__codelineno-40-66"></a><span class="w"> </span><span class="p">}</span>
@@ -5266,8 +5266,8 @@
<a id="__codelineno-40-69" name="__codelineno-40-69" href="#__codelineno-40-69"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">print</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-70" name="__codelineno-40-70" href="#__codelineno-40-70"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">kv</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">pairSet</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-71" name="__codelineno-40-71" href="#__codelineno-40-71"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">key</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">kv</span><span class="p">.</span><span class="na">key</span>
<a id="__codelineno-40-72" name="__codelineno-40-72" href="#__codelineno-40-72"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">kv</span><span class="p">.</span><span class="na">value</span>
<a id="__codelineno-40-73" name="__codelineno-40-73" href="#__codelineno-40-73"></a><span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">&quot;</span><span class="si">${</span><span class="n">key</span><span class="si">}</span><span class="s"> -&gt; </span><span class="si">${</span><span class="n">value</span><span class="si">}</span><span class="s">&quot;</span><span class="p">)</span>
<a id="__codelineno-40-72" name="__codelineno-40-72" href="#__codelineno-40-72"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">_val</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">kv</span><span class="p">.</span><span class="na">_val</span>
<a id="__codelineno-40-73" name="__codelineno-40-73" href="#__codelineno-40-73"></a><span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">&quot;</span><span class="si">${</span><span class="n">key</span><span class="si">}</span><span class="s"> -&gt; </span><span class="si">${</span><span class="n">_val</span><span class="si">}</span><span class="s">&quot;</span><span class="p">)</span>
<a id="__codelineno-40-74" name="__codelineno-40-74" href="#__codelineno-40-74"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-75" name="__codelineno-40-75" href="#__codelineno-40-75"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-76" name="__codelineno-40-76" href="#__codelineno-40-76"></a><span class="p">}</span>
@@ -5287,12 +5287,12 @@
<a id="__codelineno-40-90" name="__codelineno-40-90" href="#__codelineno-40-90"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">get</span><span class="p">(</span><span class="n">key</span><span class="p">:</span><span class="w"> </span><span class="kt">Int</span><span class="p">):</span><span class="w"> </span><span class="kt">String?</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-91" name="__codelineno-40-91" href="#__codelineno-40-91"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">index</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">hashFunc</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
<a id="__codelineno-40-92" name="__codelineno-40-92" href="#__codelineno-40-92"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">pair</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">buckets</span><span class="o">[</span><span class="n">index</span><span class="o">]</span><span class="w"> </span><span class="o">?:</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">null</span>
<a id="__codelineno-40-93" name="__codelineno-40-93" href="#__codelineno-40-93"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">pair</span><span class="p">.</span><span class="na">value</span>
<a id="__codelineno-40-93" name="__codelineno-40-93" href="#__codelineno-40-93"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">pair</span><span class="p">.</span><span class="na">_val</span>
<a id="__codelineno-40-94" name="__codelineno-40-94" href="#__codelineno-40-94"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-95" name="__codelineno-40-95" href="#__codelineno-40-95"></a>
<a id="__codelineno-40-96" name="__codelineno-40-96" href="#__codelineno-40-96"></a><span class="w"> </span><span class="cm">/* 添加操作 */</span>
<a id="__codelineno-40-97" name="__codelineno-40-97" href="#__codelineno-40-97"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">put</span><span class="p">(</span><span class="n">key</span><span class="p">:</span><span class="w"> </span><span class="kt">Int</span><span class="p">,</span><span class="w"> </span><span class="n">value</span><span class="p">:</span><span class="w"> </span><span class="kt">String</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-98" name="__codelineno-40-98" href="#__codelineno-40-98"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">pair</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Pair</span><span class="p">(</span><span class="n">key</span><span class="p">,</span><span class="w"> </span><span class="n">value</span><span class="p">)</span>
<a id="__codelineno-40-97" name="__codelineno-40-97" href="#__codelineno-40-97"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">put</span><span class="p">(</span><span class="n">key</span><span class="p">:</span><span class="w"> </span><span class="kt">Int</span><span class="p">,</span><span class="w"> </span><span class="n">_val</span><span class="p">:</span><span class="w"> </span><span class="kt">String</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-98" name="__codelineno-40-98" href="#__codelineno-40-98"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">pair</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Pair</span><span class="p">(</span><span class="n">key</span><span class="p">,</span><span class="w"> </span><span class="n">_val</span><span class="p">)</span>
<a id="__codelineno-40-99" name="__codelineno-40-99" href="#__codelineno-40-99"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">index</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">hashFunc</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
<a id="__codelineno-40-100" name="__codelineno-40-100" href="#__codelineno-40-100"></a><span class="w"> </span><span class="n">buckets</span><span class="o">[</span><span class="n">index</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pair</span>
<a id="__codelineno-40-101" name="__codelineno-40-101" href="#__codelineno-40-101"></a><span class="w"> </span><span class="p">}</span>
@@ -5328,7 +5328,7 @@
<a id="__codelineno-40-131" name="__codelineno-40-131" href="#__codelineno-40-131"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">valueSet</span><span class="p">():</span><span class="w"> </span><span class="n">MutableList</span><span class="o">&lt;</span><span class="kt">String</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-132" name="__codelineno-40-132" href="#__codelineno-40-132"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">valueSet</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">mutableListOf</span><span class="o">&lt;</span><span class="kt">String</span><span class="o">&gt;</span><span class="p">()</span>
<a id="__codelineno-40-133" name="__codelineno-40-133" href="#__codelineno-40-133"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">pair</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">buckets</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-134" name="__codelineno-40-134" href="#__codelineno-40-134"></a><span class="w"> </span><span class="n">pair</span><span class="o">?.</span><span class="na">let</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">valueSet</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="nb">it</span><span class="p">.</span><span class="na">value</span><span class="p">)</span><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-134" name="__codelineno-40-134" href="#__codelineno-40-134"></a><span class="w"> </span><span class="n">pair</span><span class="o">?.</span><span class="na">let</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">valueSet</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="nb">it</span><span class="p">.</span><span class="na">_val</span><span class="p">)</span><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-135" name="__codelineno-40-135" href="#__codelineno-40-135"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-136" name="__codelineno-40-136" href="#__codelineno-40-136"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">valueSet</span>
<a id="__codelineno-40-137" name="__codelineno-40-137" href="#__codelineno-40-137"></a><span class="w"> </span><span class="p">}</span>
@@ -5337,8 +5337,8 @@
<a id="__codelineno-40-140" name="__codelineno-40-140" href="#__codelineno-40-140"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">print</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-141" name="__codelineno-40-141" href="#__codelineno-40-141"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">kv</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">pairSet</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-142" name="__codelineno-40-142" href="#__codelineno-40-142"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">key</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">kv</span><span class="p">.</span><span class="na">key</span>
<a id="__codelineno-40-143" name="__codelineno-40-143" href="#__codelineno-40-143"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">kv</span><span class="p">.</span><span class="na">value</span>
<a id="__codelineno-40-144" name="__codelineno-40-144" href="#__codelineno-40-144"></a><span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">&quot;</span><span class="si">${</span><span class="n">key</span><span class="si">}</span><span class="s"> -&gt; </span><span class="si">${</span><span class="n">value</span><span class="si">}</span><span class="s">&quot;</span><span class="p">)</span>
<a id="__codelineno-40-143" name="__codelineno-40-143" href="#__codelineno-40-143"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">_val</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">kv</span><span class="p">.</span><span class="na">_val</span>
<a id="__codelineno-40-144" name="__codelineno-40-144" href="#__codelineno-40-144"></a><span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">&quot;</span><span class="si">${</span><span class="n">key</span><span class="si">}</span><span class="s"> -&gt; </span><span class="si">${</span><span class="n">_val</span><span class="si">}</span><span class="s">&quot;</span><span class="p">)</span>
<a id="__codelineno-40-145" name="__codelineno-40-145" href="#__codelineno-40-145"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-146" name="__codelineno-40-146" href="#__codelineno-40-146"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-147" name="__codelineno-40-147" href="#__codelineno-40-147"></a><span class="p">}</span>