在Android开发时,我们使用的大部分都是Java的api,比方HashMap这个api,使用率非常高,可是对于Android这样的对内存非常敏感的移动平台,非常多时候使用一些java的api并不能达到更好的性能,相反反而更消耗内存,所以针对Android这样的移动平台,也推出了更符合自己的api,比方SparseArray、ArrayMap用来取代HashMap在有些情况下能带来更好的性能提升。
HashMap:
HashMap内部是使用一个默认容量为16的数组来存储数据的,而数组中每个元素却又是一个链表的头结点。所以,更准确的来说,HashMap内部存储结构是使用哈希表的拉链结构(数组+链表),如图:
这样的存储数据的方法叫做拉链法
Entry存储的内容有key、value、hash值、和next下一个Entry
缺陷:
HashMap的默认存储大小是容量为16的数组,默认扩容因子是0.75,如果数据量太多HashMap扩容机制导致内存空间造成非常大的消耗和浪费
SparseArray:
比HashMap更省内存(避免了对key的主动装箱)
内部通过两个数组来存储数据,一个存key,另一个存value
存储和读取采用二分查找法
只能存key为int类型的数据
适用场景:
1.数据量不大,千级以内
2.key必须为int类型
ArrayMap:
和SparseArray差不多...
适用场景:
1.数据量不大,千级以内
2.数据类型为Map类型
SparseArray和ArrayMap都差点儿相同,使用哪个呢?
1、假设key的类型已经确定为int类型。那么使用SparseArray,由于它避免了自己主动装箱的过程,假设key为long类型,它还提供了一个LongSparseArray来确保key为long类型时的使用
2、假设key类型为其他的类型,则使用ArrayMap
网友评论