当我新建一个Hashtable时,为什么要调用put方法?

时间:2013-07-25 01:50:27

标签: java hashtable

我正在阅读Hashtable的代码,我很困惑并且有一些问题。 我这样编码:

Hashtable table = new Hashtable();
table.put(table, 1);
int code = table.hashCode();

我有两个问题:

  1. 当我像第三行代码一样调用hashCode方法时,为什么它不是无限循环?我认为这是一个无限循环。

  2. 当我调试此代码时,我发现代码new Hashtable()将导致调用put方法,为什么?

2 个答案:

答案 0 :(得分:7)

  1. 根据the OpenJDK source I'm reading,有一个专门用来防止Hashtable包含自身情况的警卫。

  2. 我在构造函数中看不到对put的任何引用。你有答案可以在你的答案中发表吗?

答案 1 :(得分:0)

首先,使用散列图,因为在许多情况下它更好。

其次,这使用了Oracle的implementation

这不是一个无限循环。 HashTable.hashCode(只需迭代地图的元素一次。不是无限的。除非表中包含自己,否则在source中我发现它确实非常hacky但确实阻止了递归。在这种情况下,它会跳过计算自己的哈希码,返回0。

  1. 查看来源,不会调用put(。只有下一行会调用Put