我正在阅读Java中的Hash Map,我发现Hash Maps是无序的和未排序的.因此,在打印使用时,我们应该以键的任意顺序获取映射System.out.println(HM).例如,以下代码
HashMap<Integer,String> HM = new HashMap<>();
HM.put(16,"hello16");
HM.put(6, "hello6");
HM.put(1, "hello1");
Run Code Online (Sandbox Code Playgroud)
打印{16=hello16, 1=hello1, 6=hello6}这是一个明显随机的键序.但是当我替换HM.put(16,"hello16");with时HM.put(15,"hello15");,它会按键的自然顺序打印映射,这是令人惊讶的,似乎不太可能:
{1=hello1, 6=hello6, 15=hello15}
Run Code Online (Sandbox Code Playgroud)
我问了一位朋友,他说这与HashMap的初始容量(= 16)有关,但他无法清楚地解释.任何人都可以用这个特定的例子解释输出中的这种差异.
该hashCode的Integer是本身的价值.您HashMap有16个桶,这意味着分配值的桶key % 16是0到15之间的数字.
如果您的密钥在0到15范围内,则桶号是密钥.当你使用钥匙> 15或钥匙时,事情就会变得混乱< 0.
打印a时HashMap,条目按桶顺序显示.也就是说,如果有的话,首先打印桶0中的密钥; 然后在桶1中的一个键,依此类推.在你的情况下HashMap,所有的按键都为0到15之间,这是完全一样的键顺序.
| 归档时间: |
|
| 查看次数: |
418 次 |
| 最近记录: |