明明Java HashMap无序,为何我的代码始终输出反向排序结果?
HashMap看似有序的原因解析
HashMap的“无序”≠绝对随机:你看到的固定逆序输出是巧合。你的键
Str1到Str5计算出的哈希值,恰好对应HashMap内部数组中倒序的位置,所以遍历entrySet和values时呈现出逆插入顺序。但这种顺序毫无保障——修改键的内容、更换JDK版本、或者添加元素触发扩容,都会打破这个“假顺序”。切勿依赖HashMap的遍历顺序:Java官方文档明确规定,HashMap不保证映射的顺序,更不保证顺序永久不变。如果需要稳定的插入顺序,应该使用
LinkedHashMap;如果需要按键排序的顺序,使用TreeMap。直接通过索引访问values数组的风险:你代码中
arr[3]能拿到value2完全依赖当前的巧合顺序,换个运行环境或调整元素,这个索引对应的结果就会变化,属于不安全的写法。
验证示例(修改键即可打破顺序)
如果把键改成"a1"、"a2"、"a3"、"a4"、"a5",运行后你会发现遍历顺序不再是逆序,这就能证明HashMap的顺序不可靠。
import java.util.Map; import java.util.HashMap; import java.util.Collection; public class Main { public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); map.put("Str1", "value1"); map.put("Str2", "value2"); map.put("Str3", "value3"); map.put("Str4", "value4"); map.put("Str5", "value5"); System.out.println(map.entrySet()); Collection<String> values = map.values(); String[] arr = values.toArray(new String[0]); System.out.println(arr[3]); } }
内容的提问来源于stack exchange,提问作者H1H
相关产品推荐
相关产品推荐

