gpt4 book ai didi

java - HashMap 元素的顺序是否可重现?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:46:42 25 4
gpt4 key购买 nike

首先,我想明确一点,我永远不会使用 HashMap 来做需要数据结构中某种顺序的事情,这个问题是出于我对 Java HashMap 实现的内部细节的好奇.

您可以在 java documentation on Object 中阅读关于Object方法hashCode

我从那里了解到 hashCode 类的实现,例如 String 和基本类型包装器(IntegerLong,...) 一旦给出了对象包含的值,它就是可预测的。一个例子是,对任何包含值 helloString 对象调用 hashCode 应该总是返回:99162322

有一种算法总是将相同的值以相同的顺序插入到空的 Java HashMap 中,其中 String 被用作键。然后,其末尾元素的顺序应该始终相同,我错了吗?

由于具体值的哈希码总是相同的,如果没有冲突,顺序应该相同。另一方面,如果存在冲突,我认为(我不知道事实)冲突解决方案应该对完全相同的输入元素产生相同的顺序。

那么,以相同顺序插入的具有相同元素的两个 HashMap 对象应该遍历(由迭代器)给出相同的元素序列,这不是对的吗?

最佳答案

据我所知,HashMap 中元素的顺序(假设我们将 values() 迭代器返回的元素顺序称为“顺序”)被保留直到执行映射重新散列。我们可以通过向构造函数提供 capacity 和/或 loadFactor 来影响该事件的概率。

然而,我们永远不应依赖此声明,因为 HashMap 的内部实现不是其公共(public)合约的一部分,并且将来可能会发生变化。

关于java - HashMap 元素的顺序是否可重现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22813022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com