【发布时间】:2014-12-04 22:34:13
【问题描述】:
问题描述
在阅读有关Hashtable的Oracle文档时,我发现“在“哈希冲突”的情况下,单个存储桶存储多个条目,必须按顺序搜索”,因此我尝试查找方法如果我有两个具有相同哈希的项目,但在文档中找不到,它将按顺序返回我的项目。为了重现这种情况,我尝试编写一个简单的代码,您可以在下面找到它。
Oracle Documentation about Hashtable
Hashtable 的实例有两个影响其性能的参数:初始容量和负载因子。容量是哈希表中的桶数,初始容量只是哈希表创建时的容量。 注意哈希表是开放的:在“哈希冲突”的情况下,单个桶存储多个条目,必须按顺序查找。负载因子是哈希表在其容量自动增加之前允许达到的程度的度量。初始容量和负载因子参数只是实现的提示。何时以及是否调用 rehash 方法的确切细节取决于实现。
简单代码
class Key {
public final int mID;
public Key(int id) {
mID = id;
}
@Override
public int hashCode() {
if(mID == 1 || mID == 2) {
System.out.println("Have same hashCode()");
return 5673654;
}
return super.hashCode();
}
};
public class HashtableTest {
public static void main(String... args) {
Hashtable<Key, String> dict = new Hashtable<Key, String>();
dict.put(new Key(1), "One");
dict.put(new Key(2), "Two");
System.out.println(dict.size()); // Prints 2
System.out.println(dict.get(new Key(1))); // Prints null
}
};
在上面的代码中,我尝试将两个具有相同哈希码的项目添加到哈希表中(无论如何我认为它们有:)),因此我创建了我的 Key 类并覆盖它的 hashCode 方法,但是这是没用的,因为我什至无法从 Hashtable 中获取项目,而且我认为项目不是按顺序添加的。
问题
- 如何模拟在一个存储桶中存储多个条目的情况? (为了更深入地了解这是如何工作的)
- 如何访问 Hashtable 中按顺序存储的项目?
【问题讨论】: