This question already has answers here:
How is this HashSet producing sorted output?
(5 个回答)
4年前关闭。
我正在学习 Java 中的容器,最近我读到 HashSet 没有按顺序提供元素。 有什么有趣的 整数 我随机制作的 HashSet 已排序。当我将其类型更改为 Double 时,打印的 HashSet 不再排序。我的问题是:那么 HashSet 对各种类型的工作方式是否不同?
(5 个回答)
4年前关闭。
我正在学习 Java 中的容器,最近我读到 HashSet 没有按顺序提供元素。 有什么有趣的 整数 我随机制作的 HashSet 已排序。当我将其类型更改为 Double 时,打印的 HashSet 不再排序。我的问题是:那么 HashSet 对各种类型的工作方式是否不同?
最佳答案
HashSet
在内部使用 HashMap
。 HashMap
使用每个对象的 hashCode()
方法将其元素存储在哈希表中。
对于 int
和 double
,它们是 auto-boxed 到 Integer
和 Double
类中。当您创建 HashSet
的 int
时,它使用 Integer's hashCode() 方法,该方法只返回 int
。所以如果你添加 int
s,它们会被排序存储。但是对于 double
, Double's hashCode() 方法要复杂得多,因为 double 在内存中的表示方式。
关于java - 为什么HashSet是排序的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40870096/
10-12 17:38