繁体   English   中英

如何将字符串散列到RandomAccessFile

[英]How do I hash strings to RandomAccessFile

我很难理解我的老师希望我们如何做这个项目的第二部分。 第一部分很容易得到员工并将其放入raf中,但是我不明白如何对ssn进行哈希处理。 有人可以解释一下吗? 我把指示以防万一。谢谢

ssn:字符串(9个字符),全名:50个字符的字符串,salary:float,age:int

1.该程序至少写入20名员工,并在随机访问时按顺序存储它们,然后以可读格式依次读取和打印所有员工。

2,重做上一部分,假设员工是基于对ssn进行散列存储的(非顺序)

您可以创建几乎任何类型的哈希。 如果我理解正确的话,我们想使用一个不同的数据值SSN来生成用于键入某些随机存取存储的哈希值。

我的第一个想法是,如果您需要一个不仅仅基于String本身的强大哈希,请将SSN包装在Class中,并使用它来存储和获取SSN值,以及提供基于hashCode()的实现在一个或多个田地上,连同种子。 在Block的“ Effective Java”中对此进行了一些描述,其中引入了HashCodeUtil类。

这里讨论了一个工作示例: http : //www.javapractices.com/topic/TopicAction.do?Id=28

在我看来,您正在尝试使用RandomAccessFile实现自己的哈希表。 如果是这样,您需要执行一个哈希码并将其转换为插槽号。 为此,以模数形式将SSN字符串的hashcode()除以某个质数,以使其接近表中您期望的条目数的两倍。 在您的情况下,可能是41。RandomAccessFile中的每个插槽都是一个条目的大小。 在您的情况下,9 + 50 + 4 + 4 =67。将插槽号乘以条目大小,即可获得RandomAccessFile中要读取和写入的位置的偏移量。

请注意,与所有哈希表一样,这可能导致冲突。 然后,现实世界中的实现将处理某种入口链。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM