现在,我想了解如何构建Hashtable
。哈希表。怎么运行的?
最有趣的 - 作为对象被添加到Hashtable
?
我曾在一本书,上面写着:
在第一步: 计算hashCode()
对象。
接下来,我们确定此对象在Hashtable
:obj.hashCode() % Hashtable.length
中的位置。
例如,加入更多的元素到Hashtable
:
Hashtable<String, String> hm=new Hashtable<String, String>(100);
hm.put("Lee","Lee");
hm.put("lee","lee");
hm.put("eel","eel");
定义成被放置在对象的铲斗:
System.out.println("Lee".hashCode() % 100);
System.out.println("lee".hashCode() % 100);
System.out.println("eel".hashCode() % 100);
如果我理解该算法,对象必须放置在该表如下:
eel /*because,"eel".hashCode() % 100=0*/,
lee /*because, "lee".hashCode() % 100=20*/,
Lee /*because, "Lee".hashCode() % 100=68*/
但我们所看到的结果?
System.out.println(hm);
{Lee=Lee, lee=lee, eel=eel}
请告诉我,我哪里出错了?
+1“在Perl中,它甚至在程序调用之间改变,以防止使用散列冲突的拒绝服务攻击。 – Thilo 2010-10-20 07:48:03
一个额外的散列函数,以防止碰到同一个桶中的不同密钥。 – 2010-10-20 07:54:52