{"componentChunkName":"component---src-templates-blog-post-js","path":"/implementation-of-hash-table-in-javascript/","result":{"data":{"markdownRemark":{"html":"<h2>hashMap的数据结构的组成</h2>\n<p>数组、链表、红黑树</p>\n<h2>哈希函数的实现</h2>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">HashMap</span><span class=\"token punctuation\">{</span>\n    <span class=\"token function\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">size</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>table <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Array</span><span class=\"token punctuation\">(</span>size<span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">simpleHash</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token function\">simpleHash</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">data</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">return</span> data <span class=\"token operator\">%</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>table<span class=\"token punctuation\">.</span>length\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token function\">put</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">data</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">let</span> pos <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">simpleHash</span><span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>table<span class=\"token punctuation\">[</span>pos<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> data\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token function\">get</span><span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">let</span> pos <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">simpleHash</span><span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>table<span class=\"token punctuation\">[</span>pos<span class=\"token punctuation\">]</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token function\">show</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>table<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\nmodule<span class=\"token punctuation\">.</span>exports <span class=\"token operator\">=</span> HashMap</code></pre></div>\n<h2>冲突|碰撞的解决方法</h2>\n<ul>\n<li>1.开链法</li>\n</ul>\n<p>如果pos冲突,即在此位置创建二维数组或者链表？</p>\n<ul>\n<li>2.线性探测法</li>\n</ul>\n<p>由于hashMap散列表是不规则的,冲突后查询下一个位置是否为空,直至结束,返回undefined</p>\n<ul>\n<li>3.红黑树?</li>\n</ul>\n<p>当某个节点后出现过多的链表节点的时候,就会转化为红黑树以提升查询效率</p>","timeToRead":1,"frontmatter":{"title":"JavaScript的哈希表实现","date":"May 05, 2019","spoiler":null},"fields":{"slug":"/implementation-of-hash-table-in-javascript/"}}},"pageContext":{"slug":"/implementation-of-hash-table-in-javascript/","previous":{"fields":{"slug":"/new-features-of-http2/"},"frontmatter":{"title":"http2的新特性"}},"next":{"fields":{"slug":"/some-differences-between-http1.0-and-1.1/"},"frontmatter":{"title":"http1.0和1.1的一些区别"}}}},"staticQueryHashes":["3649515864","63159454"]}