请解释为什么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"));
}
}
答案 0 :(得分:1)
HashMap
迭代顺序取决于对象哈希在桶之间的分布方式。当您添加新项目时,可以扩展存储桶的数量,这将需要重新分配条目,这将重新排序所有内容。
此外,作为安全措施,HashMap
的当前实现具有随机散列模式("alternative hashing"),该模式在特定阈值(jdk.map.althashing.threshold
)之后启用。这是为了阻止某类拒绝服务攻击,包括试图找到哈希冲突。