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