我很难理解我的老师希望我们如何完成这个项目的第二部分。第一部分很容易让员工把它放在r.a.f中,但我不明白我怎么能散列ssn这是一个字符串。有人可以解释一下吗。我把方向放在以防万一。谢谢
ssn:String(9个字符), fullname:50个字符的字符串, 薪水:浮动,和 age:int
1.该程序至少编写20个Employees并按顺序存储在随机访问中,然后以可读格式顺序读取和打印所有Employees。
2.Redo上一部分假设员工是基于散列ssn(非顺序)存储的
答案 0 :(得分:0)
您可以创建几乎任何类型的哈希。如果我理解正确,我们希望使用不同的数据值SSN来创建用于键入某个随机存取存储的哈希。
我的第一个想法是,如果你需要一个不仅仅基于String本身的强哈希,要将SSN包装在一个Class中,并使用它来存储和获取SSN值,以及提供一个hashCode( )基于一个或多个字段以及种子的实现。这在Block" Effective Java"中有所描述,其中引入了HashCodeUtil类。
这里讨论一个工作示例:http://www.javapractices.com/topic/TopicAction.do?Id=28
答案 1 :(得分:0)
在我看来,您正在尝试使用RandomAccessFile实现自己的哈希表。如果这是真的,您需要做的是获取哈希码并将其转换为槽号。为此,模数将SSN字符串的hashcode()除以某个素数,该素数接近于表中预期的条目数的两倍。在你的情况下可能是41. RandomAccessFile中的每个插槽都是一个条目的大小。在你的情况下,9 + 50 + 4 + 4 = 67.将插槽号乘以条目大小,以便为RandomAccessFile中的位置偏移量进行读写。
请注意,与所有哈希表一样,这可能会导致冲突。然后,真实世界的实现将处理某种类型的条目链。