<分区>
我正在学习 Java 中的容器,我最近读到 HashSet 没有按顺序提供元素。 Integer 的有趣之处是我随机生成的 HashSet 已排序。当我将其类型更改为 Double 时,打印的 HashSet 不再排序。我的问题是:那么 HashSet 对各种类型的工作方式是否不同?
<分区>
我正在学习 Java 中的容器,我最近读到 HashSet 没有按顺序提供元素。 Integer 的有趣之处是我随机生成的 HashSet 已排序。当我将其类型更改为 Double 时,打印的 HashSet 不再排序。我的问题是:那么 HashSet 对各种类型的工作方式是否不同?
最佳答案
HashSet
在内部使用了一个 HashMap
。 HashMap
使用每个对象的 hashCode()
方法将其元素存储在哈希表中。
对于 int
和 double
,它们是 auto-boxed进入 Integer
和 Double
类。当您创建 int
的 HashSet
时,它使用 Integer's hashCode()方法,它只返回 int
。因此,如果您添加 int
,它们将被存储排序。但是对于 double
,Double's hashCode()方法要复杂得多,因为 double 在内存中的表示方式。
关于java - 为什么 HashSet 是排序的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40870096/