这个map怎么是有序的

这个map怎么是有序的

  • 只看楼主
  • 收藏

  • 回复
  • w363219629
  • 淼水
    4
private static Random rand = new Random();
public static void main(String[] args) {
Map hm = new HashMap();
for (int i = 0; i < 1000; i++) {
Integer r = new Integer(rand.nextInt(20));
if (hm.containsKey(r)) { } 
else { hm.put(r,Integer.toString(i)); }
}
System.out.println(hm.toString()); }


  • 回复
  • 1楼
  • 2012-07-04 21:49
  • 举报 |个人企业举报垃圾信息举报
  • w363219629
  • 淼水
    4
输出的都是有序的,为什么啊,求解


回复
  • 2楼
  • 2012-07-04 21:51
  • 举报 |个人企业举报垃圾信息举报
  • 这个map怎么是有序的_第1张图片
  • 龙的主人
  •  windsun_ul
  • 吧主
    15
不管怎么放
在内存中总要是有一种存储方式的吧
HaspMap 内部是用 数组存的
数组自然是角标顺序的


收起回复
  • 3楼
  • 2012-07-04 21:53
  • 举报 |个人企业举报垃圾信息举报
  • w363219629:  前面都是顺序的,最后怎么是17,16,19,18
    2012-7-4 21:55 回复
  • w363219629:  新手,求大神解释下
    2012-7-4 22:16 回复
  • 我也说一句

     

  • 这个map怎么是有序的_第2张图片
  • 龙的主人
  •  windsun_ul
  • 吧主
    15
在 Map 内部的数组里,是按 hash 来排序的
但是这个 hash 不是简单的 key 的 hashcode 而是用这个方法:
static int hash(int h) {
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
}
对 key 的 hashcode 进行变换后的一个结果
根据这个结果,你会发现
hash(16) = 17
hash(17) = 16
hash(18) = 19
hash(19) = 18

所以最后几个的排序就成了:
17、16、19、18


收起回复
  • 4楼
  • 2012-07-04 22:37
  • 举报 |个人企业举报垃圾信息举报
  • w363219629:  谢谢指教了

你可能感兴趣的:(JAVA)