我的任务是建立银行管理系统。客户帐户通过哈希表保存在银行内,因此对于每个客户,由个人识别号码表示,将有一个帐户的arraylist(一个客户最多可以有2个帐户 - 一个储蓄帐户和一个支出帐户)。
我要做的是手动处理可能发生的碰撞。我怎样才能做到这一点?我有什么方法可以覆盖?我不得不提一下HashTables不是我的一杯茶,因为我很难在C中与他们合作。
P.S。 - 我计划使用HashMap,因为我理解更容易使用。
编辑 - 手动碰撞处理是必需的。
编辑2 - 这是一项要求,因为实验室助理希望我们了解哈希表的工作原理。经过更多的挖掘,我想我需要从Hashtable中覆盖“equals”方法,所以没有HashMap。这是正确的方法吗? (不需要新的ADT)
答案 0 :(得分:3)
标准哈希表实现会自动执行冲突处理,您无法控制它。但是,你必须做的是为用作密钥的对象实现hashCode()
和equals()
- 但在String
/ Number
的情况下,这也是由标准完成的图书馆已经。
因此,如果任务真的是您要处理冲突 - 那么您必须构建自己的Map
实现。
答案 1 :(得分:2)
我要做的是手动处理可能发生的碰撞。我怎么能这样做?
如果您需要自己进行碰撞处理,则需要从头开始实现哈希表。你不能使用HashMap
或HashTable
或我知道的任何其他现有类......因为它们都会为你处理碰撞等。
我必须提到HashTables不是我的一杯茶,因为我很难在C中与他们合作。
多么不幸。您将必须了解它们才能完成此练习。 (第二个想法,也许这个要求是好的......如果它迫使你正确理解哈希表是如何工作的。)
为了记录,有许多关于数据结构的好文本解释了哈希表的工作原理。如果您没有教科书,the Wikipedia page非常全面。教科书和维基百科都将描述处理碰撞的各种技术。
经过多次挖掘后,我想我需要从Hashtable中覆盖“equals”方法,所以没有HashMap。这是正确的方法吗? (不需要新的ADT)
我不这么认为。
equals
/ Hashtable
的{{1}}方法与哈希表条目的冲突处理无关。
HashMap
/ Hashtable
中的碰撞检测逻辑是私有方法,因此无法直接覆盖它。
我认为实验室助理希望/希望您实现哈希表ADT,我不知道如何避免这样做。但是,嘿,你可以随时询问实验室助理他或她期望你做什么。
奖励建议:地图的目标类型应该是一个自定义类,它包含对这两个帐户的引用,以及用户的个人详细信息。它不应该是HashMap
。