Почему вывод 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). Это должно помешать определенному классу атак типа "отказ в обслуживании", которые включают в себя попытки найти коллизии хешей.

Другие вопросы по тегам