Hash是一种对查找的优化,比如我们找一个数,第一种就是从头找到尾,第二种是二分查找
    而hash就是对这种查找的进一步优化,属于空间换时间
    比如一个停车场,我们使用数组的思路就是,10000辆车提供10000个位置,每个人针对自己是1234就去找到自己的位置了。但是10000这个数据很大呀,我们只能提供100个怎么办,而且实际上也未必需要这10000个车位,毕竟同一时刻的流量是有限的。
    因此使用hash表,我们使用key来对应寻找value,而对于10000 个 key 我们放置在这100个位置中显然需要一些其他的方式。简单地做法就是直接取模100,那么就是对应上了100个车位。但是问题来了,这样肯定会出现碰撞,比如101和201,我们需要处理碰撞。最简单的思路就是碰撞了后移一个位置,这就是线性探测,但是最糟的情况可能需要探索N个,因此又有了平方探测法。但实际上使用的hash算法以及碰撞处理都是不太一样的。
    Rust中的哈希表的实现是一种类似于C++的SwissTable的新式哈希表,性能远超普通的hash
    使用的SipHash1-3算法