美文网首页
2018-11-13

2018-11-13

作者: 小峰_b75f | 来源:发表于2018-11-13 16:16 被阅读0次

在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

相关文章

网友评论

      本文标题:2018-11-13

      本文链接:https://www.haomeiwen.com/subject/obslfqtx.html