例如,如果我有两个字符串
s1 = "stack"
,
s2 = "stacks"
,
如何实现程序以允许将字符串放在同一个存储桶中(在这种情况下s1
和s2
将位于同一个存储桶中)?
此实现是否与哈希函数有关?
我正在创建一个解谜程序,整个想法是不再需要搜索" stacks
"如果我知道" stack
"在拼图中不存在。
答案 0 :(得分:2)
您必须创建一个哈希函数,为“堆栈”和“堆栈”返回相同的值(hashCode)。 BTW this is not a good idea
。 hashCode生成不应该基于您想要在链中的内容(即,在哈希表中发生冲突时的链表)。它应该是这样的,它为每个被添加的对象返回一个唯一值,并减少冲突。
答案 1 :(得分:0)
这会有点难度,因为String是一个你无法扩展并覆盖它的最终类。你可以做的就是创建一个包装类,它将把你的字符串作为成员变量进行搜索。您可以将此对象存储在哈希表中。现在,您可以在此类中重写equals和hashcode以匹配链接字符串。
public class MyString
{
public String string;
public boolean equals(Object s)
{
//your logic for comparing string
}
public int hashcode()
{
//generate hashcode that is same for two objects true by equals
}
}
即便如此,我也不确定你是否能够实现。我建议使用Trie数据结构,这将使您的任务变得更加容易。