如果我们没有任何hashmap API,如何制作HashMap?
答案 0 :(得分:1)
只需创建一个具有两个属性(键和值)的类,并提供适当的方法。
答案 1 :(得分:1)
我正在采取行动,猜测你的意思是HashMap
,而你没有HashMap
API的原因是你使用的是Java ME。
答案是使用{ME}具有的HashTable
,AFAIK。
另一方面,如果这是一个家庭作业问题并且您被要求从头开始实现自己的哈希表,那么您应该首先阅读哈希表的工作方式。请参阅您的讲义,数据结构教科书......或在维基百科/谷歌上查找“哈希表”
答案 2 :(得分:1)
如果你真的需要自己设计,那么至少你应该阅读一本关于数据结构和算法的书。这是一个简单的基于c ++向量的HashTable implementation.
答案 3 :(得分:0)
哈希映射的基础是:
1)具有后备存储 - 一个至少与您已包含的条目数一样大的数组(或等效项)。两个数组,一个用于键,一个用于值,或者是一组键值对的元组(后者可能更好)
2)一个函数,用于决定将新键放入哪个键数组索引。通常这将是key.HashCode()%array.Length - 但是如果它已经持有一个键并且它不是相同的键(通过key.Equals(),那么你尝试右边的下一个桶,然后下一个,我们确实找到了一个。只要我们在从哈希映射中删除一个键时执行逆向操作就可以了 - 换句话说,因为这个'滑键切换'操作已经完成,因为没有洞,如果我们打洞,我们必须看一把钥匙是否需要滑入其中以填补空隙(例如,不要将任何钥匙滑到比我们检查的第一个位置更远的地方,否则如果我们可以向左滑动,向左滑动。)
3)现在,要查看HashMap中是否存在某个键,请计算我们放置它的位置并检查该索引。如果它被占用并且等于(),找到它。如果它已被占用且不匹配,请以相同方式检查右侧的一个。如果它是空的,却找不到它。
4)另外一个操作,一个艰难的操作 - 当我们接近填满时重建后备存储的大小加倍(我们越接近填充,效率越差,所以你想加倍填写之前的方式)。您必须为后备存储分配两倍大的空间,重新计算旧存储中每个密钥的位置,复制密钥和值,丢弃旧存储并安装新存储。