HashMap,SparseArray,Arraymap分析

1 HashMap的原理可以看美团点评的文章:

HashMap 初始化一个长度为16的数组,数组的每个元素又是一个链表结构;

HashMap在put数据的时候,会根据key的hashCode值进行hash算法, 在进行高位运算得到这个值在data[] 数组中的index,然后将value放入数组的位置,如果发生hash碰撞使用链地址法-也就是多个值成为一个链表形式。

当然还有其他方法:开放地址法 ,再哈希法,链地址法,建立公共溢出区。

而且HashMap还有一个 负载因此0.75,存储数据达到容量的75%时会扩容一倍大小;

这样可知--HashMap在内存使用率上并不是很高;在数据量较大的情况下,data数组的数据是不连续的,浪费了许多内存;

2 ArrayMap在设计上更多的考虑了内存优化;

他有两个数组;一个数组用来存放key的hash值,并且是排好序的;另一个数组用来存放keyvalue值;

这样一个数据就占用一份内存;内存节省;

get/put时会根据key的hashCode进行二分查找到index,在另一个数组中获取值;

3 SpareArray和Arraymap是类似的,但是它只是在key为int的时候能够使用,也就是去掉了装箱的操作,性能稍有提升。


一般来说数据量小于1000的时候可以使用ArrayMap来替代hashMap,节约内存;

但数据量较大的时候查询速度没有hashmap块;查询和插入的速度比hashmap慢。

参考 http://www.jianshu.com/p/7b9a1b386265

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • HashMap 是 Java 面试必考的知识点,面试官从这个小知识点就可以了解我们对 Java 基础的掌握程度。网...
    野狗子嗷嗷嗷阅读 6,714评论 9 107
  • 前言 这次我和大家一起学习HashMap,HashMap我们在工作中经常会使用,而且面试中也很频繁会问到,因为它里...
    liangzzz阅读 8,026评论 7 102
  • 实际上,HashSet 和 HashMap 之间有很多相似之处,对于 HashSet 而言,系统采用 Hash 算...
    曹振华阅读 2,530评论 1 37
  • 提到mysql压缩相关的内容,我们能想到的可能是如下几种和压缩相关的场景: 1、客户端和服务器之间传输的数据量太大...
    飞鸿无痕阅读 2,873评论 0 6
  • 安装最新 npm 版本npm i npm -g 一. 安装 webpack: (全局安装) // 查看版本:web...
    _Wake阅读 337评论 0 2