@ Ответ Бехранга хорош, но, чтобы быть более конкретным, единственная причина, по которой HashSet
выглядит в том же порядке, что и LinkedHashSet
, заключается в том, что integer.hashCode()
само по себе является целочисленным значением, поэтому числа происходят быть в порядке во внутреннем хранилище HashSet
. Это очень специфичная для реализации и, как говорит @Behrang, действительно совпадение.
Например, если вы используете new HashSet<>(4)
, который устанавливает начальное количество сегментов равным 4 (вместо 16), то вы могли бы получить следующий вывод:
HashSet<Integer> hi = new HashSet<Integer>(4);
...
[3, 4, 5, 6, 7, 8, 9]
[8, 9, 3, 4, 5, 6, 7]
[8, 9, 3, 4, 5, 6, 7]
Если вы застряли в значениях> = 16, вы можете получить что-то вроде этого:
Integer[] j = new Integer[] { 3, 4, 5, 6, 7, 8, 9, 16 };
...
[3, 4, 5, 6, 7, 8, 9, 16]
[16, 3, 4, 5, 6, 7, 8, 9]
[16, 3, 4, 5, 6, 7, 8, 9]