我正在学习Java中的容器,我最近读到HashSet没有按顺序提供元素。 整数对我随机制作的HashSet有什么兴趣。当我将其类型更改为 Double 时,打印的HashSet不再排序。我的问题是:HashSet对各种类型的工作方式不同吗?
答案 0 :(得分:3)
HashSet
在内部使用HashMap
。 HashMap
使用每个Object的hashCode()
方法将其元素存储在哈希表中。
对于int
和double
,这些Integer
和Double
类都是auto-boxed。当您HashSet
生成int
时,它会使用Integer's hashCode()方法,该方法只返回int
。因此,如果添加int
s,它们将被存储为已排序。但是对于double
,Double's hashCode()方法要复杂得多,因为在内存中表示了双精度的方式。
答案 1 :(得分:1)
当散列加倍时,Java会将其转换为long,因为它们都只是内存中的64位值。
您实际上可以对哈希码进行实验,以了解它如何适用于整数和双精度。
选中此处了解详情:Hash a double in Java