我正在学习Java中的HashMap,发现HashMap是无序且未排序的。因此,当使用System.out.println(HM)
打印时,键值对会以任意顺序显示。例如,下面的代码:
HashMap<Integer,String> HM = new HashMap<>();
HM.put(16,"hello16");
HM.put(6, "hello6");
HM.put(1, "hello1");
打印出来的是{16=hello16, 1=hello1, 6=hello6}
,看起来是键的随机顺序。但是当我将 HM.put(16,"hello16");
替换为 HM.put(15,"hello15");
时,它会按照键的自然顺序打印映射结果,这一点令人惊讶并且不太可能偶然发生:
{1=hello1, 6=hello6, 15=hello15}
我问了一个朋友,他说这与HashMap的初始容量(=16)有关,但他不能清楚地解释。有人能用这个特定的例子解释一下输出的差异吗?
Set#of
和Map#of
的插入顺序是随机的,正是出于这个原因。 - Jacob G.