4

我的任务是做一个银行管理系统。客户账户使用哈希表保存在银行内部,因此对于每个客户,由个人识别号表示,将有一个账户数组列表(客户最多可以有 2 个账户 - 一个储蓄账户和一个消费账户)。

我要做的是手动处理可能发生的碰撞。我怎样才能做到这一点?我必须重写什么方法?我不得不提到 HashTables 不是我的一杯茶,因为我在 C 中使用它们时遇到了困难。

PS - 我打算使用 HashMap 因为我理解它更容易使用。

编辑- 手动碰撞处理是必需的。

编辑 2 - 这是一个要求,因为实验室助理希望我们了解哈希表的工作原理。经过更多的挖掘,我想我需要重写 Hashtable 中的“equals”方法,所以没有 HashMap。这是一个正确的方法吗?(不需要新的 ADT)

4

2 回答 2

3

标准哈希表实现会自动进行冲突处理,您无法控制它。但是,您必须做的是为用作键的对象实现hashCode()和- 但在/的情况下,标准库也已经完成了。因此,如果任务真的是让您处理冲突 - 那么您必须构建自己的实现。equals()StringNumberMap

于 2012-04-29T10:34:53.727 回答
2

我要做的是手动处理可能发生的碰撞。我怎样才能做到这一点?

如果您自己进行冲突处理是一项硬性要求,您将需要从头开始实现哈希表。您不能使用HashMapHashTable我知道的任何其他现有类......因为它们都为您处理碰撞等。

我不得不提到 HashTables 不是我的一杯茶,因为我在 C 中使用它们时遇到了困难。

多么的不幸。您将必须了解它们才能完成此练习。(再想一想,也许这个要求是一件好事......如果它迫使你正确理解哈希表是如何工作的。)

作为记录,有很多关于数据结构的好文章解释了哈希表是如何工作的。如果您没有教科书,维基百科页面非常全面。教科书和维基百科都将描述处理碰撞的各种技术。


经过更多的挖掘,我想我需要重写 Hashtable 中的“equals”方法,所以没有 HashMap。这是一个正确的方法吗?(不需要新的 ADT)

我不这么认为。

  • /的equals方法与哈希表条目的冲突处理无关。HashtableHashMap

  • Hashtable/中的碰撞检测逻辑在HashMap私有方法中,因此您不能直接覆盖它。

我认为实验室助理希望/期望您实现哈希表 ADT,但我不知道如何避免这样做。但是,嘿,你总是可以问实验室助理他或她希望你做什么。


额外建议:地图的目标类型应该是一个自定义类,其中包含对两个帐户的引用,以及用户的个人详细信息。它不应该是一个ArrayList.

于 2012-04-29T10:05:50.703 回答