-
Notifications
You must be signed in to change notification settings - Fork 779
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
2019-08-27:为什么推荐用SparseArray代替HashMap? #130
Comments
sparseArray使用的是双数组实现,寻址采用二分法,比hashmap链表上挨着查找快。 |
|
类似的结构有 |
并不能替换所有的HashMap。只能替换以int类型为key的HashMap。 HashMap中如果以int为key,会强制使用Integer这个包装类型,当我们使用int类型作为key的时候系统会自用装箱成为Integer,这个过程会创建对象一想效率。SparseArray内部是一个int数组和一个object数组。可以直接使用int减少了自动装箱操作。 |
因为sparseArray避免了对key的自动装箱(int转成integer),它的内部是采用2个数组来实现的;一个存储key 一个存储value;相对来说,性能更快,内部采用压缩方式节省内存空间; |
首先并不能说完全用SparseArray替代。在key是int并且数据量小于1000的情况下,用SparseArray替代确实在空间上性能要好,但是在时间上只能接近HashMap而已。 |
1.. 并不慢; 在数据量较小的安卓平台下, 安卓的集合框架, 更节省内存, 时间复杂度是log2n, 性能表现不俗; hashMap, 图看不见, 点击去就好了 好多人回答, 为什么 ArrayMap 更节省内存, 总是回答, 扩容时候的系数, arraMap 存的是对象本身, HashMap 存的是 Node 包装类, 这个很多人, 就包括我. 后来我找答案了, 后续的面试中, 都会回答面试官想要我讲的, 稀疏数组的概念; 其实再做分析的时候, 很多人都看到了, 只是没往这方便想而已的. |
数据结构方面:hashmap用的是链表。sparsearray用的是双数组。 |
SparseArray三大特点双数组、删除O(1)、二分查找 为什么省内存?
复杂度为什么这么低?
在调用
|
我来说一下,这个应该是时代的原因。 HashMap和SparseArray,都是用来存储Key-value类型的数据。 他们最大的不同就是:SparseArray采用的是开放定址法;而HashMap采用的是链地址法。 现在早已经不是内存稀缺的时代了,因此在数据量较小的场景,这一点内存效率是让位于时间效率的。 因此系统推荐sparseArray,推荐arrayMap,来替代HashMap。。这是共同的问题。 |
ArrayMap的mHashes[]和mArray[]分别存储的是key(升序排列)和key-value,mArray大小是mHashes的2倍。与SparseArray相比key可以为任何类型。请问是你所说 “key不是int小于1000的话。可以用Arraymap。” 这样吗? |
sparseArray代替HanshMap的条件 key为int 并存储量小 |
No description provided.
The text was updated successfully, but these errors were encountered: