Java中的哈希表手动冲突处理

时间:2012-04-29 10:02:50

标签: java hashtable collision

我的任务是建立银行管理系统。客户帐户通过哈希表保存在银行内,因此对于每个客户,由个人识别号码表示,将有一个帐户的arraylist(一个客户最多可以有2个帐户 - 一个储蓄帐户和一个支出帐户)。

我要做的是手动处理可能发生的碰撞。我怎样才能做到这一点?我有什么方法可以覆盖?我不得不提一下HashTables不是我的一杯茶,因为我很难在C中与他们合作。

P.S。 - 我计划使用HashMap,因为我理解更容易使用。

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

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

2 个答案:

答案 0 :(得分:3)

标准哈希表实现会自动执行冲突处理,您无法控制它。但是,你必须做的是为用作密钥的对象实现hashCode()equals() - 但在String / Number的情况下,这也是由标准完成的图书馆已经。 因此,如果任务真的是您要处理冲突 - 那么您必须构建自己的Map实现。

答案 1 :(得分:2)

  

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

如果您需要自己进行碰撞处理,则需要从头开始实现哈希表。你不能使用HashMapHashTable或我知道的任何其他现有类......因为它们都会为你处理碰撞等。

  

我必须提到HashTables不是我的一杯茶,因为我很难在C中与他们合作。

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

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


  

经过多次挖掘后,我想我需要从Hashtable中覆盖“equals”方法,所以没有HashMap。这是正确的方法吗? (不需要新的ADT)

我不这么认为。

  • equals / Hashtable的{​​{1}}方法与哈希表条目的冲突处理无关。

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

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


奖励建议:地图的目标类型应该是一个自定义类,它包含对这两个帐户的引用,以及用户的个人详细信息。它不应该是HashMap

相关问题