我们都知道在安卓开发过程中,如果hashmap和Arraymap在内存优化方面,肯定会选择ArrayMap,因为ArrayMap占用空间小,但是ArrayMap以时间换空间,速度也是慢了很多。
ArrayMap因为查找方法是二分法,并且当你删除或者添加数据时,会对空间重新调整,在使用大量数据时,效率低于50%,但在写Android时,适时的使用ArrayMap,会给内存使用带来可观的提升
那他们区别是什么呢?
HashMap内部有一个HashMapEntry[]对象,每一个键值对都存储在这个对象里,当使用put方法添加键值对时,就会new一个HashMapEntry对象
ArrayMap的存储中没有Entry这个东西,他是由两个数组来维护的,mHashes数组中保存的是每一项的HashCode值,mArray中就是键值对,每两个元素代表一个键值对,前面保存key,后面的保存value
添加数据时扩容时的处理不一样
HashMap 是创建一个新的容量是之前二倍的对象,然后将之前的数据移动到新的。
ArrayMap用的是copy数据,所以效率相对要高,ArrayMap提供了数组收缩的功能,在clear或remove后,会重新收缩数组,是否空间,