1

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

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

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

4

2 回答 2

2

这取决于您的应用程序。通常,您不允许哈希表中有多个具有相同键的不同条目(如果您插入具有相同键的条目,则将现有的键/值对替换为新的键/值对)。

如果您确实支持与同一个键关联的多个值,那么使用最适合您的方式返回所有这些值是完全可以的。您可以想象返回一个数组,该数组可能包含多个值,也可能只包含一个值。另一种选择是返回一对迭代器,它们跨越具有相同键的值对范围(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();

希望这可以帮助!

于 2013-01-07T05:31:28.613 回答
1

我不完全确定您为什么被否决,但这不是一个坏问题。

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

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

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

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

希望有帮助!

于 2013-01-07T03:13:12.413 回答