为什么Hashmap的输出是任意的,而不是特定的顺序?为什么它的排序顺序会在插入时发生变化;删除新节点?

时间:2013-08-25 17:51:27

标签: data-structures hashmap

请解释为什么hashmap会产生不可预测的输出?在哪个基础上对元素进行排序?当我们插入/删除新元素时,为什么它的输出会发生变化?     import java.util.HashMap;     import 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 个答案:

答案 0 :(得分:1)

HashMap迭代顺序取决于对象哈希在桶之间的分布方式。当您添加新项目时,可以扩展存储桶的数量,这将需要重新分配条目,这将重新排序所有内容。

此外,作为安全措施,HashMap的当前实现具有随机散列模式("alternative hashing"),该模式在特定阈值(jdk.map.althashing.threshold)之后启用。这是为了阻止某类拒绝服务攻击,包括试图找到哈希冲突。