java吧 关注:1,242,391贴子:12,716,542
  • 11回复贴,共1

请问Map在内存中的存储方式是不是这样的?

只看楼主收藏回复

Map的变量存储的是一个引用(地址),这个引用指向了第一个key键的值和一个地址,而第二个地址才是存储了value值,而第二个key键和第二个value值的地址存储在哪则是看第一个key键和value地址占用了多少存储空间。
我这样理解对不?


1楼2016-10-21 09:40回复
    java里面的map底层是一个数组,数组元素是一个pair就是Map.Entry,根据hash函数映射到这个数组上面而已.... c++里面的map好像就是一个红黑树...


    IP属地:浙江2楼2016-10-21 09:58
    回复


      来自Android客户端3楼2016-10-21 09:59
      回复
        那要看是什么map了,常用的HashMap应该是使用一个列表数组实现的(注意是列表的数组,也就是一个二维结构)。键值对被封装成了一个对象,通过key可以求出哈希码,通过哈希码%桶数等方法求出该键值对所在的列表在列表数组中的下标(当然这只是简单的算法,java标准库在这方面肯定是有优化的),再将键值对存入下标对应的子列表中。因为数组是支持随机访问的,所以map的查询速度回非常快


        IP属地:浙江来自Android客户端4楼2016-10-21 10:26
        收起回复
          底层是数组加链表了,过程比较复杂,建议去看看源码


          IP属地:北京5楼2016-10-21 10:43
          回复
            应该是哈西表实现的


            来自Android客户端10楼2016-10-21 10:51
            回复
              常用的是hashmap,数组加链表实现的


              IP属地:江苏来自手机贴吧11楼2016-10-21 11:39
              回复