Почему вывод Hashmap является произвольным, а не в определенном порядке? почему порядок сортировки получает изменения при вставке и удалении нового узла?
Пожалуйста, объясните, почему hashmap дает непредсказуемый вывод? На каком основании он сортирует элементы? почему его вывод меняется, когда мы вставляем / удаляем новый элемент? import java.util.HashMap; импорт java.util.Iterator; import java.util.Set;
public class Main6
{
public static void main(String[] args)
{
HashMap<String, String> hMap = new HashMap<String, String>();
hMap.put("10", "One");
hMap.put("11", "Two");
hMap.put("12", "Three");
hMap.put("17", "simran");
hMap.put("13", "four");
hMap.put("14", "five");
Set st = hMap.keySet();
//st.remove("12");
Iterator itr = st.iterator();
while (itr.hasNext())
System.out.println(itr.next());
// remove 2 from Set
//st.remove("12");
System.out.println(hMap.containsKey("12"));
}
}
1 ответ
HashMap
Порядок итераций зависит от того, как хеши объектов распределяются по сегментам. Когда вы добавляете новый элемент, количество сегментов может быть увеличено, что потребует перераспределения записей, что приведет к переупорядочению всего.
Кроме того, в качестве меры безопасности, текущие реализации HashMap
иметь случайный режим хеширования ( "альтернативное хеширование"), который включается после определенного порога (jdk.map.althashing.threshold
). Это должно помешать определенному классу атак типа "отказ в обслуживании", которые включают в себя попытки найти коллизии хешей.