Per HashSet java docs
Не дает никаких гарантий относительно порядка итерации набора;в частности, это не гарантирует, что порядок будет оставаться постоянным во времени
Код: -
Set<String> set = new HashSet<String>();
set.add("This is Tiger");
set.add("This is Cat");
set.add("This is Dog");
set.add("This is Elephant");
set.add("This is Parrot");
for(int i=0;i<100;i++){
for(String str:set){
System.out.println(str);
}
}
Когда я выполняю вышеуказанный код любое количество раз, я вижу нижеoutput
This is Elephant
This is Parrot
This is Cat
This is Dog
This is Tiger
Мой вопрос: когда в java docs говорится, что HashSet не гарантирует, что порядок будет оставаться постоянным в течение некоторого времени, тогда почему я вижу вышеприведенный порядок одинаковым любое количество раз, когда я выполняю программу.
Выполняет ли он внутреннее упорядочение на основе хеш-кода строки?
Обновление: - На основании ответов выглядит, как порядок будет предсказуемым, если задано статическое значение.Когда я говорю «предсказуемый», это не означает, что порядок поиска будет таким же, как порядок вставки, но независимо от того, какой порядок был возвращен в первый раз, он будет таким же со временем.добавив 5 статических записей, он поместит эти записи в корзину (ничего, кроме некоторой позиции в списке / массиве) на основе хэш-кода.Let's Elephant подходит под 3-е ведро, Попугай - 5-е ведро, Кошка - 6-е ведро, Собака - 9-е ведро, Тигр - 10-е ведро
Теперь, если я добавлю жирафа, он подойдет для 8-го ведра на основе хэш-кода> Сейчасесли я повторяю, он будет повторять записи из начального сегмента.Это будет постоянным во времени.Таким образом, если set - статический порядок, то он может быть предсказуемым.
Я не собираюсь использовать Hashset для упорядочивания, но у меня есть сторонний код, помещающий статические записи в HashSet, которые я не могу изменить.Мне нужно по какой-то причине предсказать порядок среди этих записей