首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >HashSet中元素的顺序是如何工作的?

HashSet中元素的顺序是如何工作的?
EN

Stack Overflow用户
提问于 2014-01-21 23:27:15
回答 4查看 3K关注 0票数 4

我知道HashSet中元素的顺序应该是任意的。但出于好奇,有人能告诉我顺序是如何确定的吗?

我注意到,当我插入两个元素(例如A和B)时,顺序将为A, B,然后再次重新执行相同的代码将得到B, A,然后第三次重新执行它将得到A, B

我的意思是,这有点不确定,而且有点奇怪。

EN

Stack Overflow用户

发布于 2014-01-21 23:35:02

顺序由Hash Map/Set中使用的哈希算法、该Map的确切设置和对象的Hashcode确定。

如果您的对象在多次运行时具有一致的哈希码(例如字符串),并且以相同的顺序放入具有相同设置的映射中,那么通常它们每次都会以相同的顺序出现。如果他们不这样做,那么他们就不会这么做。

在这里可以看到HashMap的源代码:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/HashMap.java

事实上,该来源中的一句有趣的话是:

这个类不能保证映射的顺序;特别是,它不能保证顺序随着时间的推移保持不变。

因此,不仅您的程序每次运行时顺序可能不同,而且事实上,API本身也不能保证即使在程序的一次运行中,顺序也将保持不变!

“不确定且有点奇怪”是对HashMap排序的一个很好的描述--实际上文档上也是这么说的。如果您想要排序,请使用LinkedHashMapTreeMap。如果你不想要排序,那么不用担心,通过有效地随机排序,HashMap可以从它所保证的方法的行为中给你极快的响应!

票数 4
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21262299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档