为什么HashSet已排序?

时间:2016-11-29 15:51:13

标签: java integer hashset

我正在学习Java中的容器,我最近读到HashSet没有按顺序提供元素。 整数对我随机制作的HashSet有什么兴趣。当我将其类型更改为 Double 时,打印的HashSet不再排序。我的问题是:HashSet对各种类型的工作方式不同吗?

2 个答案:

答案 0 :(得分:3)

HashSet在内部使用HashMapHashMap使用每个Object的hashCode()方法将其元素存储在哈希表中。

对于intdouble,这些IntegerDouble类都是auto-boxed。当您HashSet生成int时,它会使用Integer's hashCode()方法,该方法只返回int。因此,如果添加int s,它们将被存储为已排序。但是对于doubleDouble's hashCode()方法要复杂得多,因为在内存中表示了双精度的方式。

答案 1 :(得分:1)

当散列加倍时,Java会将其转换为long,因为它们都只是内存中的64位值。

您实际上可以对哈希码进行实验,以了解它如何适用于整数和双精度。

选中此处了解详情:Hash a double in Java