This commit is contained in:
krahets
2024-04-09 20:43:47 +08:00
parent cceeb4658b
commit a4dec11e8e
60 changed files with 2976 additions and 1970 deletions
+133 -141
View File
@@ -5203,153 +5203,145 @@
<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>
<a id="__codelineno-40-8" name="__codelineno-40-8" href="#__codelineno-40-8"></a><span class="kd">class</span><span class="w"> </span><span class="nc">ArrayHashMap</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-9" name="__codelineno-40-9" href="#__codelineno-40-9"></a><span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">buckets</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">arrayOfNulls</span><span class="o">&lt;</span><span class="n">Pair</span><span class="o">&gt;</span><span class="p">(</span><span class="m">100</span><span class="p">)</span>
<a id="__codelineno-40-10" name="__codelineno-40-10" href="#__codelineno-40-10"></a>
<a id="__codelineno-40-11" name="__codelineno-40-11" href="#__codelineno-40-11"></a><span class="w"> </span><span class="k">init</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-12" name="__codelineno-40-12" href="#__codelineno-40-12"></a><span class="w"> </span><span class="c1">// 初始化数组,包含 100 个桶</span>
<a id="__codelineno-40-13" name="__codelineno-40-13" href="#__codelineno-40-13"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="m">0.</span><span class="p">.</span><span class="o">&lt;</span><span class="m">100</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-14" name="__codelineno-40-14" href="#__codelineno-40-14"></a><span class="w"> </span><span class="n">buckets</span><span class="o">[</span><span class="n">i</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span>
<a id="__codelineno-40-15" name="__codelineno-40-15" href="#__codelineno-40-15"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-9" name="__codelineno-40-9" href="#__codelineno-40-9"></a><span class="w"> </span><span class="c1">// 初始化数组,包含 100 个桶</span>
<a id="__codelineno-40-10" name="__codelineno-40-10" href="#__codelineno-40-10"></a><span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">buckets</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">arrayOfNulls</span><span class="o">&lt;</span><span class="n">Pair</span><span class="o">&gt;</span><span class="p">(</span><span class="m">100</span><span class="p">)</span>
<a id="__codelineno-40-11" name="__codelineno-40-11" href="#__codelineno-40-11"></a>
<a id="__codelineno-40-12" name="__codelineno-40-12" href="#__codelineno-40-12"></a><span class="w"> </span><span class="cm">/* 哈希函数 */</span>
<a id="__codelineno-40-13" name="__codelineno-40-13" href="#__codelineno-40-13"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">hashFunc</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">Int</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-14" name="__codelineno-40-14" href="#__codelineno-40-14"></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">key</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="m">100</span>
<a id="__codelineno-40-15" name="__codelineno-40-15" href="#__codelineno-40-15"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">index</span>
<a id="__codelineno-40-16" name="__codelineno-40-16" href="#__codelineno-40-16"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-17" name="__codelineno-40-17" href="#__codelineno-40-17"></a>
<a id="__codelineno-40-18" name="__codelineno-40-18" href="#__codelineno-40-18"></a><span class="w"> </span><span class="cm">/* 哈希函数 */</span>
<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">hashFunc</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">Int</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">key</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="m">100</span>
<a id="__codelineno-40-21" name="__codelineno-40-21" href="#__codelineno-40-21"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">index</span>
<a id="__codelineno-40-22" name="__codelineno-40-22" href="#__codelineno-40-22"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-23" name="__codelineno-40-23" href="#__codelineno-40-23"></a>
<a id="__codelineno-40-24" name="__codelineno-40-24" href="#__codelineno-40-24"></a><span class="w"> </span><span class="cm">/* 查询操作 */</span>
<a id="__codelineno-40-25" name="__codelineno-40-25" href="#__codelineno-40-25"></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-26" name="__codelineno-40-26" href="#__codelineno-40-26"></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-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">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-28" name="__codelineno-40-28" href="#__codelineno-40-28"></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-29" name="__codelineno-40-29" href="#__codelineno-40-29"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-30" name="__codelineno-40-30" href="#__codelineno-40-30"></a>
<a id="__codelineno-40-31" name="__codelineno-40-31" href="#__codelineno-40-31"></a><span class="w"> </span><span class="cm">/* 添加操作 */</span>
<a id="__codelineno-40-32" name="__codelineno-40-32" href="#__codelineno-40-32"></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-33" name="__codelineno-40-33" href="#__codelineno-40-33"></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-18" name="__codelineno-40-18" href="#__codelineno-40-18"></a><span class="w"> </span><span class="cm">/* 查询操作 */</span>
<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-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-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>
<a id="__codelineno-40-31" name="__codelineno-40-31" href="#__codelineno-40-31"></a>
<a id="__codelineno-40-32" name="__codelineno-40-32" href="#__codelineno-40-32"></a><span class="w"> </span><span class="cm">/* 删除操作 */</span>
<a id="__codelineno-40-33" name="__codelineno-40-33" href="#__codelineno-40-33"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">remove</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="p">{</span>
<a id="__codelineno-40-34" name="__codelineno-40-34" href="#__codelineno-40-34"></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-35" name="__codelineno-40-35" href="#__codelineno-40-35"></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-36" name="__codelineno-40-36" href="#__codelineno-40-36"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-37" name="__codelineno-40-37" href="#__codelineno-40-37"></a>
<a id="__codelineno-40-38" name="__codelineno-40-38" href="#__codelineno-40-38"></a><span class="w"> </span><span class="cm">/* 删除操作 */</span>
<a id="__codelineno-40-39" name="__codelineno-40-39" href="#__codelineno-40-39"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">remove</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="p">{</span>
<a id="__codelineno-40-40" name="__codelineno-40-40" href="#__codelineno-40-40"></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-41" name="__codelineno-40-41" href="#__codelineno-40-41"></a><span class="w"> </span><span class="c1">// 置为 null ,代表删除</span>
<a id="__codelineno-40-42" name="__codelineno-40-42" href="#__codelineno-40-42"></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="kc">null</span>
<a id="__codelineno-40-43" name="__codelineno-40-43" href="#__codelineno-40-43"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-44" name="__codelineno-40-44" href="#__codelineno-40-44"></a>
<a id="__codelineno-40-45" name="__codelineno-40-45" href="#__codelineno-40-45"></a><span class="w"> </span><span class="cm">/* 获取所有键值对 */</span>
<a id="__codelineno-40-46" name="__codelineno-40-46" href="#__codelineno-40-46"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">pairSet</span><span class="p">():</span><span class="w"> </span><span class="n">MutableList</span><span class="o">&lt;</span><span class="n">Pair</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-47" name="__codelineno-40-47" href="#__codelineno-40-47"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">pairSet</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ArrayList</span><span class="o">&lt;</span><span class="n">Pair</span><span class="o">&gt;</span><span class="p">()</span>
<a id="__codelineno-40-48" name="__codelineno-40-48" href="#__codelineno-40-48"></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-49" name="__codelineno-40-49" href="#__codelineno-40-49"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">pair</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="n">pairSet</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="n">pair</span><span class="p">)</span>
<a id="__codelineno-40-50" name="__codelineno-40-50" href="#__codelineno-40-50"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-51" name="__codelineno-40-51" href="#__codelineno-40-51"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">pairSet</span>
<a id="__codelineno-40-52" name="__codelineno-40-52" href="#__codelineno-40-52"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-53" name="__codelineno-40-53" href="#__codelineno-40-53"></a>
<a id="__codelineno-40-54" name="__codelineno-40-54" href="#__codelineno-40-54"></a><span class="w"> </span><span class="cm">/* 获取所有键 */</span>
<a id="__codelineno-40-55" name="__codelineno-40-55" href="#__codelineno-40-55"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">keySet</span><span class="p">():</span><span class="w"> </span><span class="n">MutableList</span><span class="o">&lt;</span><span class="kt">Int</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-56" name="__codelineno-40-56" href="#__codelineno-40-56"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">keySet</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ArrayList</span><span class="o">&lt;</span><span class="kt">Int</span><span class="o">&gt;</span><span class="p">()</span>
<a id="__codelineno-40-57" name="__codelineno-40-57" href="#__codelineno-40-57"></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-58" name="__codelineno-40-58" href="#__codelineno-40-58"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">pair</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="n">keySet</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="n">pair</span><span class="p">.</span><span class="na">key</span><span class="p">)</span>
<a id="__codelineno-40-59" name="__codelineno-40-59" href="#__codelineno-40-59"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-60" name="__codelineno-40-60" href="#__codelineno-40-60"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">keySet</span>
<a id="__codelineno-40-61" name="__codelineno-40-61" href="#__codelineno-40-61"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-62" name="__codelineno-40-62" href="#__codelineno-40-62"></a>
<a id="__codelineno-40-63" name="__codelineno-40-63" href="#__codelineno-40-63"></a><span class="w"> </span><span class="cm">/* 获取所有值 */</span>
<a id="__codelineno-40-64" name="__codelineno-40-64" href="#__codelineno-40-64"></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-65" name="__codelineno-40-65" href="#__codelineno-40-65"></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">ArrayList</span><span class="o">&lt;</span><span class="kt">String</span><span class="o">&gt;</span><span class="p">()</span>
<a id="__codelineno-40-66" name="__codelineno-40-66" href="#__codelineno-40-66"></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-67" name="__codelineno-40-67" href="#__codelineno-40-67"></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-68" name="__codelineno-40-68" href="#__codelineno-40-68"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-69" name="__codelineno-40-69" href="#__codelineno-40-69"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">valueSet</span>
<a id="__codelineno-40-70" name="__codelineno-40-70" href="#__codelineno-40-70"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-71" name="__codelineno-40-71" href="#__codelineno-40-71"></a>
<a id="__codelineno-40-72" name="__codelineno-40-72" href="#__codelineno-40-72"></a><span class="w"> </span><span class="cm">/* 打印哈希表 */</span>
<a id="__codelineno-40-73" name="__codelineno-40-73" href="#__codelineno-40-73"></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-74" name="__codelineno-40-74" href="#__codelineno-40-74"></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-75" name="__codelineno-40-75" href="#__codelineno-40-75"></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-76" name="__codelineno-40-76" href="#__codelineno-40-76"></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-77" name="__codelineno-40-77" href="#__codelineno-40-77"></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-78" name="__codelineno-40-78" href="#__codelineno-40-78"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-79" name="__codelineno-40-79" href="#__codelineno-40-79"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-80" name="__codelineno-40-80" href="#__codelineno-40-80"></a><span class="p">}</span>
<a id="__codelineno-40-81" name="__codelineno-40-81" href="#__codelineno-40-81"></a>
<a id="__codelineno-40-82" name="__codelineno-40-82" href="#__codelineno-40-82"></a><span class="cm">/* 基于数组实现的哈希表 */</span>
<a id="__codelineno-40-83" name="__codelineno-40-83" href="#__codelineno-40-83"></a><span class="kd">class</span><span class="w"> </span><span class="nc">ArrayHashMap</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-84" name="__codelineno-40-84" href="#__codelineno-40-84"></a><span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">buckets</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">arrayOfNulls</span><span class="o">&lt;</span><span class="n">Pair</span><span class="o">&gt;</span><span class="p">(</span><span class="m">100</span><span class="p">)</span>
<a id="__codelineno-40-85" name="__codelineno-40-85" href="#__codelineno-40-85"></a>
<a id="__codelineno-40-86" name="__codelineno-40-86" href="#__codelineno-40-86"></a><span class="w"> </span><span class="k">init</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-87" name="__codelineno-40-87" href="#__codelineno-40-87"></a><span class="w"> </span><span class="c1">// 初始化数组,包含 100 个桶</span>
<a id="__codelineno-40-88" name="__codelineno-40-88" href="#__codelineno-40-88"></a><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="m">0.</span><span class="p">.</span><span class="o">&lt;</span><span class="m">100</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-89" name="__codelineno-40-89" href="#__codelineno-40-89"></a><span class="w"> </span><span class="n">buckets</span><span class="o">[</span><span class="n">i</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span>
<a id="__codelineno-40-90" name="__codelineno-40-90" href="#__codelineno-40-90"></a><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="p">}</span>
<a id="__codelineno-40-92" name="__codelineno-40-92" href="#__codelineno-40-92"></a>
<a id="__codelineno-40-93" name="__codelineno-40-93" href="#__codelineno-40-93"></a><span class="w"> </span><span class="cm">/* 哈希函数 */</span>
<a id="__codelineno-40-94" name="__codelineno-40-94" href="#__codelineno-40-94"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">hashFunc</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">Int</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-95" name="__codelineno-40-95" href="#__codelineno-40-95"></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">key</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="m">100</span>
<a id="__codelineno-40-96" name="__codelineno-40-96" href="#__codelineno-40-96"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">index</span>
<a id="__codelineno-40-97" name="__codelineno-40-97" href="#__codelineno-40-97"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-98" name="__codelineno-40-98" href="#__codelineno-40-98"></a>
<a id="__codelineno-40-99" name="__codelineno-40-99" href="#__codelineno-40-99"></a><span class="w"> </span><span class="cm">/* 查询操作 */</span>
<a id="__codelineno-40-100" name="__codelineno-40-100" href="#__codelineno-40-100"></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-101" name="__codelineno-40-101" href="#__codelineno-40-101"></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-102" name="__codelineno-40-102" href="#__codelineno-40-102"></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-103" name="__codelineno-40-103" href="#__codelineno-40-103"></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-104" name="__codelineno-40-104" href="#__codelineno-40-104"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-105" name="__codelineno-40-105" href="#__codelineno-40-105"></a>
<a id="__codelineno-40-106" name="__codelineno-40-106" href="#__codelineno-40-106"></a><span class="w"> </span><span class="cm">/* 添加操作 */</span>
<a id="__codelineno-40-107" name="__codelineno-40-107" href="#__codelineno-40-107"></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-108" name="__codelineno-40-108" href="#__codelineno-40-108"></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-109" name="__codelineno-40-109" href="#__codelineno-40-109"></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-110" name="__codelineno-40-110" href="#__codelineno-40-110"></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-111" name="__codelineno-40-111" href="#__codelineno-40-111"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-112" name="__codelineno-40-112" href="#__codelineno-40-112"></a>
<a id="__codelineno-40-113" name="__codelineno-40-113" href="#__codelineno-40-113"></a><span class="w"> </span><span class="cm">/* 删除操作 */</span>
<a id="__codelineno-40-114" name="__codelineno-40-114" href="#__codelineno-40-114"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">remove</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="p">{</span>
<a id="__codelineno-40-115" name="__codelineno-40-115" href="#__codelineno-40-115"></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-116" name="__codelineno-40-116" href="#__codelineno-40-116"></a><span class="w"> </span><span class="c1">// 置为 null ,代表删除</span>
<a id="__codelineno-40-117" name="__codelineno-40-117" href="#__codelineno-40-117"></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="kc">null</span>
<a id="__codelineno-40-35" name="__codelineno-40-35" href="#__codelineno-40-35"></a><span class="w"> </span><span class="c1">// 置为 null ,代表删除</span>
<a id="__codelineno-40-36" name="__codelineno-40-36" href="#__codelineno-40-36"></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="kc">null</span>
<a id="__codelineno-40-37" name="__codelineno-40-37" href="#__codelineno-40-37"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-38" name="__codelineno-40-38" href="#__codelineno-40-38"></a>
<a id="__codelineno-40-39" name="__codelineno-40-39" href="#__codelineno-40-39"></a><span class="w"> </span><span class="cm">/* 获取所有键值对 */</span>
<a id="__codelineno-40-40" name="__codelineno-40-40" href="#__codelineno-40-40"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">pairSet</span><span class="p">():</span><span class="w"> </span><span class="n">MutableList</span><span class="o">&lt;</span><span class="n">Pair</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-41" name="__codelineno-40-41" href="#__codelineno-40-41"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">pairSet</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="n">Pair</span><span class="o">&gt;</span><span class="p">()</span>
<a id="__codelineno-40-42" name="__codelineno-40-42" href="#__codelineno-40-42"></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-43" name="__codelineno-40-43" href="#__codelineno-40-43"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">pair</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span>
<a id="__codelineno-40-44" name="__codelineno-40-44" href="#__codelineno-40-44"></a><span class="w"> </span><span class="n">pairSet</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="n">pair</span><span class="p">)</span>
<a id="__codelineno-40-45" name="__codelineno-40-45" href="#__codelineno-40-45"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-46" name="__codelineno-40-46" href="#__codelineno-40-46"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">pairSet</span>
<a id="__codelineno-40-47" name="__codelineno-40-47" href="#__codelineno-40-47"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-48" name="__codelineno-40-48" href="#__codelineno-40-48"></a>
<a id="__codelineno-40-49" name="__codelineno-40-49" href="#__codelineno-40-49"></a><span class="w"> </span><span class="cm">/* 获取所有键 */</span>
<a id="__codelineno-40-50" name="__codelineno-40-50" href="#__codelineno-40-50"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">keySet</span><span class="p">():</span><span class="w"> </span><span class="n">MutableList</span><span class="o">&lt;</span><span class="kt">Int</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-51" name="__codelineno-40-51" href="#__codelineno-40-51"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">keySet</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">Int</span><span class="o">&gt;</span><span class="p">()</span>
<a id="__codelineno-40-52" name="__codelineno-40-52" href="#__codelineno-40-52"></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-53" name="__codelineno-40-53" href="#__codelineno-40-53"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">pair</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span>
<a id="__codelineno-40-54" name="__codelineno-40-54" href="#__codelineno-40-54"></a><span class="w"> </span><span class="n">keySet</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="n">pair</span><span class="p">.</span><span class="na">key</span><span class="p">)</span>
<a id="__codelineno-40-55" name="__codelineno-40-55" href="#__codelineno-40-55"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-56" name="__codelineno-40-56" href="#__codelineno-40-56"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">keySet</span>
<a id="__codelineno-40-57" name="__codelineno-40-57" href="#__codelineno-40-57"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-58" name="__codelineno-40-58" href="#__codelineno-40-58"></a>
<a id="__codelineno-40-59" name="__codelineno-40-59" href="#__codelineno-40-59"></a><span class="w"> </span><span class="cm">/* 获取所有值 */</span>
<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-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>
<a id="__codelineno-40-67" name="__codelineno-40-67" href="#__codelineno-40-67"></a>
<a id="__codelineno-40-68" name="__codelineno-40-68" href="#__codelineno-40-68"></a><span class="w"> </span><span class="cm">/* 打印哈希表 */</span>
<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-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>
<a id="__codelineno-40-77" name="__codelineno-40-77" href="#__codelineno-40-77"></a>
<a id="__codelineno-40-78" name="__codelineno-40-78" href="#__codelineno-40-78"></a><span class="cm">/* 基于数组实现的哈希表 */</span>
<a id="__codelineno-40-79" name="__codelineno-40-79" href="#__codelineno-40-79"></a><span class="kd">class</span><span class="w"> </span><span class="nc">ArrayHashMap</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-80" name="__codelineno-40-80" href="#__codelineno-40-80"></a><span class="w"> </span><span class="c1">// 初始化数组,包含 100 个桶</span>
<a id="__codelineno-40-81" name="__codelineno-40-81" href="#__codelineno-40-81"></a><span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">buckets</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">arrayOfNulls</span><span class="o">&lt;</span><span class="n">Pair</span><span class="o">&gt;</span><span class="p">(</span><span class="m">100</span><span class="p">)</span>
<a id="__codelineno-40-82" name="__codelineno-40-82" href="#__codelineno-40-82"></a>
<a id="__codelineno-40-83" name="__codelineno-40-83" href="#__codelineno-40-83"></a><span class="w"> </span><span class="cm">/* 哈希函数 */</span>
<a id="__codelineno-40-84" name="__codelineno-40-84" href="#__codelineno-40-84"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">hashFunc</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">Int</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-85" name="__codelineno-40-85" href="#__codelineno-40-85"></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">key</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="m">100</span>
<a id="__codelineno-40-86" name="__codelineno-40-86" href="#__codelineno-40-86"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">index</span>
<a id="__codelineno-40-87" name="__codelineno-40-87" href="#__codelineno-40-87"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-88" name="__codelineno-40-88" href="#__codelineno-40-88"></a>
<a id="__codelineno-40-89" name="__codelineno-40-89" href="#__codelineno-40-89"></a><span class="w"> </span><span class="cm">/* 查询操作 */</span>
<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-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-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>
<a id="__codelineno-40-102" name="__codelineno-40-102" href="#__codelineno-40-102"></a>
<a id="__codelineno-40-103" name="__codelineno-40-103" href="#__codelineno-40-103"></a><span class="w"> </span><span class="cm">/* 删除操作 */</span>
<a id="__codelineno-40-104" name="__codelineno-40-104" href="#__codelineno-40-104"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">remove</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="p">{</span>
<a id="__codelineno-40-105" name="__codelineno-40-105" href="#__codelineno-40-105"></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-106" name="__codelineno-40-106" href="#__codelineno-40-106"></a><span class="w"> </span><span class="c1">// 置为 null ,代表删除</span>
<a id="__codelineno-40-107" name="__codelineno-40-107" href="#__codelineno-40-107"></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="kc">null</span>
<a id="__codelineno-40-108" name="__codelineno-40-108" href="#__codelineno-40-108"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-109" name="__codelineno-40-109" href="#__codelineno-40-109"></a>
<a id="__codelineno-40-110" name="__codelineno-40-110" href="#__codelineno-40-110"></a><span class="w"> </span><span class="cm">/* 获取所有键值对 */</span>
<a id="__codelineno-40-111" name="__codelineno-40-111" href="#__codelineno-40-111"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">pairSet</span><span class="p">():</span><span class="w"> </span><span class="n">MutableList</span><span class="o">&lt;</span><span class="n">Pair</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-112" name="__codelineno-40-112" href="#__codelineno-40-112"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">pairSet</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="n">Pair</span><span class="o">&gt;</span><span class="p">()</span>
<a id="__codelineno-40-113" name="__codelineno-40-113" href="#__codelineno-40-113"></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-114" name="__codelineno-40-114" href="#__codelineno-40-114"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">pair</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span>
<a id="__codelineno-40-115" name="__codelineno-40-115" href="#__codelineno-40-115"></a><span class="w"> </span><span class="n">pairSet</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="n">pair</span><span class="p">)</span>
<a id="__codelineno-40-116" name="__codelineno-40-116" href="#__codelineno-40-116"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-117" name="__codelineno-40-117" href="#__codelineno-40-117"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">pairSet</span>
<a id="__codelineno-40-118" name="__codelineno-40-118" href="#__codelineno-40-118"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-119" name="__codelineno-40-119" href="#__codelineno-40-119"></a>
<a id="__codelineno-40-120" name="__codelineno-40-120" href="#__codelineno-40-120"></a><span class="w"> </span><span class="cm">/* 获取所有键值对 */</span>
<a id="__codelineno-40-121" name="__codelineno-40-121" href="#__codelineno-40-121"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">pairSet</span><span class="p">():</span><span class="w"> </span><span class="n">MutableList</span><span class="o">&lt;</span><span class="n">Pair</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-122" name="__codelineno-40-122" href="#__codelineno-40-122"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">pairSet</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ArrayList</span><span class="o">&lt;</span><span class="n">Pair</span><span class="o">&gt;</span><span class="p">()</span>
<a id="__codelineno-40-120" name="__codelineno-40-120" href="#__codelineno-40-120"></a><span class="w"> </span><span class="cm">/* 获取所有键 */</span>
<a id="__codelineno-40-121" name="__codelineno-40-121" href="#__codelineno-40-121"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">keySet</span><span class="p">():</span><span class="w"> </span><span class="n">MutableList</span><span class="o">&lt;</span><span class="kt">Int</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-122" name="__codelineno-40-122" href="#__codelineno-40-122"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">keySet</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">Int</span><span class="o">&gt;</span><span class="p">()</span>
<a id="__codelineno-40-123" name="__codelineno-40-123" href="#__codelineno-40-123"></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-124" name="__codelineno-40-124" href="#__codelineno-40-124"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">pair</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="n">pairSet</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="n">pair</span><span class="p">)</span>
<a id="__codelineno-40-125" name="__codelineno-40-125" href="#__codelineno-40-125"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-126" name="__codelineno-40-126" href="#__codelineno-40-126"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">pairSet</span>
<a id="__codelineno-40-127" name="__codelineno-40-127" href="#__codelineno-40-127"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-128" name="__codelineno-40-128" href="#__codelineno-40-128"></a>
<a id="__codelineno-40-129" name="__codelineno-40-129" href="#__codelineno-40-129"></a><span class="w"> </span><span class="cm">/* 获取所有键 */</span>
<a id="__codelineno-40-130" name="__codelineno-40-130" href="#__codelineno-40-130"></a><span class="w"> </span><span class="kd">fun</span><span class="w"> </span><span class="nf">keySet</span><span class="p">():</span><span class="w"> </span><span class="n">MutableList</span><span class="o">&lt;</span><span class="kt">Int</span><span class="o">&gt;</span><span class="w"> </span><span class="p">{</span>
<a id="__codelineno-40-131" name="__codelineno-40-131" href="#__codelineno-40-131"></a><span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">keySet</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ArrayList</span><span class="o">&lt;</span><span class="kt">Int</span><span class="o">&gt;</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="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-133" name="__codelineno-40-133" href="#__codelineno-40-133"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">pair</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span><span class="w"> </span><span class="n">keySet</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="n">pair</span><span class="p">.</span><span class="na">key</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="p">}</span>
<a id="__codelineno-40-135" name="__codelineno-40-135" href="#__codelineno-40-135"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">keySet</span>
<a id="__codelineno-40-136" name="__codelineno-40-136" href="#__codelineno-40-136"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-137" name="__codelineno-40-137" href="#__codelineno-40-137"></a>
<a id="__codelineno-40-138" name="__codelineno-40-138" href="#__codelineno-40-138"></a><span class="w"> </span><span class="cm">/* 获取所有值 */</span>
<a id="__codelineno-40-139" name="__codelineno-40-139" href="#__codelineno-40-139"></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-140" name="__codelineno-40-140" href="#__codelineno-40-140"></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">ArrayList</span><span class="o">&lt;</span><span class="kt">String</span><span class="o">&gt;</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">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-142" name="__codelineno-40-142" href="#__codelineno-40-142"></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-143" name="__codelineno-40-143" href="#__codelineno-40-143"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-144" name="__codelineno-40-144" href="#__codelineno-40-144"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">valueSet</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>
<a id="__codelineno-40-147" name="__codelineno-40-147" href="#__codelineno-40-147"></a><span class="w"> </span><span class="cm">/* 打印哈希表 */</span>
<a id="__codelineno-40-148" name="__codelineno-40-148" href="#__codelineno-40-148"></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-149" name="__codelineno-40-149" href="#__codelineno-40-149"></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-150" name="__codelineno-40-150" href="#__codelineno-40-150"></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-151" name="__codelineno-40-151" href="#__codelineno-40-151"></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-152" name="__codelineno-40-152" href="#__codelineno-40-152"></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-153" name="__codelineno-40-153" href="#__codelineno-40-153"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-154" name="__codelineno-40-154" href="#__codelineno-40-154"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-155" name="__codelineno-40-155" href="#__codelineno-40-155"></a><span class="p">}</span>
<a id="__codelineno-40-124" name="__codelineno-40-124" href="#__codelineno-40-124"></a><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">pair</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="p">)</span>
<a id="__codelineno-40-125" name="__codelineno-40-125" href="#__codelineno-40-125"></a><span class="w"> </span><span class="n">keySet</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="n">pair</span><span class="p">.</span><span class="na">key</span><span class="p">)</span>
<a id="__codelineno-40-126" name="__codelineno-40-126" href="#__codelineno-40-126"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-127" name="__codelineno-40-127" href="#__codelineno-40-127"></a><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">keySet</span>
<a id="__codelineno-40-128" name="__codelineno-40-128" href="#__codelineno-40-128"></a><span class="w"> </span><span class="p">}</span>
<a id="__codelineno-40-129" name="__codelineno-40-129" href="#__codelineno-40-129"></a>
<a id="__codelineno-40-130" name="__codelineno-40-130" href="#__codelineno-40-130"></a><span class="w"> </span><span class="cm">/* 获取所有值 */</span>
<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-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>
<a id="__codelineno-40-138" name="__codelineno-40-138" href="#__codelineno-40-138"></a>
<a id="__codelineno-40-139" name="__codelineno-40-139" href="#__codelineno-40-139"></a><span class="w"> </span><span class="cm">/* 打印哈希表 */</span>
<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-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>
</code></pre></div>
</div>
<div class="tabbed-block">