java吧 关注:1,240,347贴子:12,711,959

萌新问个问题。hashMap到底有没有顺序,我自己怎么试都是有序的

只看楼主收藏回复



IP属地:江西1楼2019-03-16 15:46回复
    如上图我把key值hashCode之后摸一个16得到的位置是7,8,5,。可是遍历的顺序却不是这样,百度上的答案都是说放入顺序和取出顺序不一样的


    IP属地:江西2楼2019-03-16 15:49
    回复
      有没有大佬帮萌新解惑


      IP属地:江西3楼2019-03-16 15:50
      回复
        老哥 hashmap不是直接使用的jdk的hashcode 有这个疑问不如多去看看源码


        来自Android客户端4楼2019-03-16 15:52
        收起回复
          萌新围观。。


          来自Android客户端5楼2019-03-16 15:54
          回复
            是无序的,你可以看源码不是单纯的取hashcode还会进行位移运算


            IP属地:泰国来自Android客户端6楼2019-03-16 15:55
            收起回复
              大家不要管hashcode了,我把key值遍历出来的顺序是和添加顺序一样的


              IP属地:江西来自Android客户端7楼2019-03-16 16:05
              回复
                你添加的字符不变,添加的顺序变一下,再遍历看看。


                IP属地:四川8楼2019-03-16 16:18
                回复
                  好吧,得出结论,之前那些有序只是巧合而已,hashmap是无序的


                  IP属地:江西9楼2019-03-16 16:33
                  回复
                    理解这个问题需要明白下面几点:1-hash算法。2-rehash发生的时机


                    来自iPhone客户端10楼2019-03-16 16:36
                    收起回复
                      hashmap可以看成是无序的,但是也可以看成是有规律的,只不过这个规律很"无序"。你可以试着把Integer当成key放进去你会发现不管放入几个元素的顺序是怎样最后遍历出的元素顺序都是固定的(当然两次是没有冲突,否则会有小不同)。
                      hashmap的entry数组的存储下标是放入的对象的hashcode对hashmap容量取余的余数。


                      IP属地:上海来自Android客户端11楼2019-03-18 08:22
                      回复
                        哈希知道什么吗?。


                        IP属地:广东来自Android客户端12楼2019-03-18 12:32
                        回复
                          %15不是16


                          IP属地:上海来自iPhone客户端13楼2019-05-11 18:39
                          回复
                            无需的 不一定每次都是有序的 虽然你输出是有序的 但是还存在无序的风险 几率问题


                            14楼2019-05-11 19:09
                            回复
                              经验证是无序的


                              15楼2019-08-19 15:03
                              回复