-5

如果我们没有任何 haspmap api,如何制作 HaspMap?

4

4 回答 4

1

如果你真的需要自己设计,那么你至少应该读一本关于数据结构和算法的书。

这是一个简单的基于 C++ 向量的HashTable 实现。

于 2013-04-17T05:08:21.207 回答
1

只需创建一个具有两个属性(键和值)的类并提供适当的方法。

于 2013-04-17T04:58:34.217 回答
1

我赌一把,猜你的意思是HashMap,你没有HashMapAPI 的原因是你使用的是 Java ME。

答案是使用HashTable...... Java ME 所拥有的,AFAIK。


另一方面,如果这是一个家庭作业问题,并且您被要求从头开始实现自己的哈希表,那么您应该首先阅读哈希表的工作原理。请参阅您的讲义、数据结构教科书……或在 Wikipedia / Google 上查找“哈希表”

于 2013-04-17T05:02:15.307 回答
0

哈希映射的基础是:

1)拥有后备存储 - 一个至少与您已经包含的条目数一样大的数组(或等价物)。两个数组,一个用于键,一个用于值,或者一个键值对元组数组(后者可能更好)

2) 决定我们将新键放入哪个键数组索引的函数。通常这将是 key.HashCode()%array.Length - 但如果它已经持有一个密钥并且它不是同一个密钥(通过 key.Equals(),那么你尝试右边的下一个桶,然后下一个,依此类推,直到我们找到一个。只要我们在从哈希映射中删除一个键时执行相反的操作,就可以这样做 - 换句话说,因为这个“滑动键”操作已经完成,因为没有洞,如果我们打了一个洞,我们必须看看是否需要将钥匙滑入其中以填补空隙(例如,不要将任何钥匙滑到比我们要检查的第一个位置更远的地方,否则如果我们可以向左滑,向左滑动)。

3) 现在,要查看 HashMap 中是否存在键,计算我们将它放在哪里并检查该索引。如果它被占用并且等于(),找到它。如果它被占用并且不匹配,请以相同的方式检查右侧的一个。如果它是空的,没有找到它。

4) 一个操作,一个艰难的操作——当我们快要填满时,重建两倍大小的后备存储(我们越接近填满,效率越差,所以你想在你之前加倍填上)。您必须为后备存储分配两倍大的空间,为新存储重新计算旧存储中每个键的位置,复制键和值,丢弃旧存储并安装新存储。

于 2013-04-17T05:07:39.423 回答