最好的查找结构是HashTable
。它提供持续的访问一般(最坏情况下呈线性)。
这取决于哈希函数。好的。
我的问题如下。假设一个良好的实施HashTable
e.g. HashMap
关于映射中传递的键是否有最佳实践?我的意思是建议键必须是不可变的对象,但我想知道是否还有其他建议。
例如密钥的大小?例如,在一个好的哈希图中(以上述方式)如果我们使用String
作为键,“瓶颈”不会出现在字符串比较中吗equals
(试图找到钥匙)?那么按键应该保持小吗?或者是否存在不应该用作键的对象?例如。 AURL
?在这种情况下,您如何选择使用什么作为密钥?
HashMap 性能最好的键可能是 Integer,其中hashCode()
and equals()
实施为:
public int hashCode() {
return value;
}
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
也就是说,HashMap 的目的是将某些对象(值)映射到其他对象(键)。使用哈希函数来寻址(值)对象的事实是为了提供快速、恒定时间的访问。
建议键必须是不可变的对象,但我想知道是否还有其他建议。
建议将对象映射到您需要的内容:不要认为哪个更快;只考虑哪个更快。但请考虑什么最适合您的业务逻辑来处理要检索的对象。
重要的要求是键对象必须是不可变的,因为如果您在将键对象存储到 Map 后更改它,则以后可能无法检索关联的值。
The key word in HashMap
is Map
。你的对象应该只是map。如果您牺牲了优化密钥的映射任务,那么您就违背了映射的目的 - 可能无法实现任何性能提升。
我 100% 同意你问题中的前两条评论:
主要的限制是它必须是您想要作为查找基础的东西;)
——奥利·查尔斯沃斯
一般规则是使用您需要查找的任何内容作为键。
——路易斯·沃瑟曼
记住优化的两条规则:
- Don't.
- (仅适用于专家)还没有。
第三条规则是:优化前的配置文件.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)