现在,我正在努力了解如何构建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");
Run Code Online (Sandbox Code Playgroud)
定义一个放置对象的桶:
System.out.println("Lee".hashCode() % 100);
System.out.println("lee".hashCode() % 100);
System.out.println("eel".hashCode() % 100);
Run Code Online (Sandbox Code Playgroud)
如果我理解算法,则必须将对象放在表中,如下所示:
eel /*because,"eel".hashCode() % 100=0*/,
lee /*because, "lee".hashCode() % 100=20*/,
Lee /*because, "Lee".hashCode() % 100=68*/
Run Code Online (Sandbox Code Playgroud)
但是我们看到了什么?
System.out.println(hm);
{Lee=Lee, lee=lee, eel=eel}
Run Code Online (Sandbox Code Playgroud)
请告诉我,我哪里出错了?
Hashtable
(以及HashMap
)元素的迭代顺序不能得到保证(依赖于实现),因此恕我直言,尝试在其上构建理论并没有多大意义.它甚至可能在不同的Java版本之间发生变化(它确实从Java5变为Java6).
顺便说一句Hashtable
是过时的,建议使用(和分析)HashMap
.
作为基本的哈希映射实现,您的描述听起来不错.但是,实际的实现HashMap
比这更复杂,至少从Java4开始.例如,哈希表的大小始终是2的幂(对于您描述的基本哈希表,这将是一个非常糟糕的决定),并且从内部重新获得从关键对象获得的哈希值,以实现比实际更均匀的分布桌子的大小.有关此内容的更多详细信息,请参阅Java专家时事通讯的以下问题:
归档时间: |
|
查看次数: |
11172 次 |
最近记录: |