首先,我想澄清的是,我永远不会使用 HashMap 来做需要某种数据结构顺序的事情,并且这个问题是出于我对 Java HashMap 实现的内部细节的好奇而提出的。
您可以阅读java 文档上Object http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode%28%29有关Object
method hashCode
.
我从那里了解到hashCode
类的实现,例如String
和基本类型包装器(Integer
, Long
,...) 一旦给出了对象包含的值,就可以预测。一个例子是调用hashCode
对于任何String
包含值的对象hello
应该总是返回:99162322
有一个算法总是插入到空的 Java HashMap 中,其中String
s 以相同的顺序用作相同的值的键。那么,其末尾元素的顺序应该始终相同,我错了吗?
由于具体值的哈希码始终相同,因此如果不存在冲突,则顺序应该相同。
另一方面,如果存在冲突,我认为(我不知道事实)对于完全相同的输入元素,冲突解决方案应该导致相同的顺序。
那么,两个具有相同元素、以相同顺序插入的 HashMap 对象应该(通过迭代器)遍历并给出相同的元素序列,这不是正确的吗?
据我所知的顺序(假设我们将返回的元素的顺序称为“顺序”)values()
迭代器)中的元素HashMap
保留直到执行地图重新散列。我们可以通过提供影响该事件的概率capacity
and/or loadFactor
到构造函数。
然而,我们永远不应该依赖这个声明,因为内部实现HashMap
不是其公共合同的一部分,并且将来可能会发生变化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)