链式哈希表:接口和重复?

时间:2013-01-07 03:03:03

标签: data-structures hashtable

好吧所以我实现了我自己的链式哈希表,因为使用的sdk我没有。这是一个理论问题,因此代码和语言并不重要。问题是:

如果我为一个键做一个GET元素/对象,并且链式哈希表有这个键的2个对象,我会返回吗?数组? 所以GET函数返回一个数组? 如果只有1个元素怎么办? Get函数也返回一个数组? 我试图让它尽可能透明给用户。

any1是否有任何关于链接散列表的函数原型的信息?

2 个答案:

答案 0 :(得分:2)

这取决于您的申请。通常,您不允许在具有相同键的哈希表中存在多个不同的条目(如果插入具有相同键的条目,则用新键/值对替换现有键/值对)。 / p>

如果你确实支持与同一个键相关联的多个值,那么使用最适合你的方法返回所有值是完全没问题的。您可以想象返回一个数组,该数组可能包含多个值或者可能只包含一个值。另一个选择是返回一对迭代器,这些迭代器跨越具有相同键的值对的范围(C ++ std::unordered_multimap采用的方法)。

至于功能原型:这取决于语言。通常,它们看起来像这样(用Java-ish表示法):

boolean add(KeyType key, ValueType value);
boolean containsKey(KeyType key);
boolean remove(KeyType key);
int size();
ValueType get(KeyType key);
Iterator keyIterator();
Iterator valueIterator();

希望这有帮助!

答案 1 :(得分:1)

我不完全确定你为什么会被投票,但这不是一个糟糕的问题。

我建议在网上进行谷歌搜索和研究,以便您对数据结构的理解更加完整。

我建议这篇文章:http://www.algolist.net/Data_structures/Hash_table/Chaining

你可以在第一个例子中看到他们正在使用基本的链表链接,尽管开放寻址是另一种选择。

就你的返回值而言,我会保持一致并且如果你采用链接方法(而不是单个值,如果只存在一个),则总是返回一个列表,这样调用代码总是可以期望接收列表然后迭代内容 - 如果它是一个或多个结果,那么你可以轻松地处理它。但是,如果您返回多个或单个值的列表,那么您的方法不是我认为的一致(除非您将其记录为原样)。

希望有所帮助!