带有String键的Android SparseArray?

时间:2014-07-19 04:24:24

标签: android string memory-management key sparse-array

我需要使用hashmap在我的Android应用程序中存储键/值(可能有数千个),但我知道我应该使用SparseArray来节省内存。但是,我的密钥需要是一个字符串。有没有办法创建SparseArray或其他替代方案的自定义实现?

4 个答案:

答案 0 :(得分:17)

当整数是关键时,SparseArray才是唯一的东西。它是一种内存优化,只能通过整数值进行,因为您需要对密钥进行二进制搜索。对字符串进行二进制搜索是昂贵的并且没有明确定义(应该' 1'是否小于或大于'或者'或者疯狂的日语字符'?),所以他们不要这样做。

BTW,SparseArray可以节省内存,但可能需要更多时间。一个HashMap的get应该是O(n / size),其中size是hashmap中的桶数。 SparseArray将是O(log(n))。使用哪个取决于您需要的内存和速度。如果你有一个真正大的(100K条目),你甚至会遇到内存分页问题,​​其中缓存未命中的物理现实可能导致更多的HashMap表现更好,即使它在技术上更糟糕,因为它将具有最大值每次获取1次缓存未命中,而二进制搜索可能有多次。

答案 1 :(得分:6)

您可以使用 ArrayMap :ArrayMap是一个通用的key->值映射数据结构,旨在提高内存效率,而不是传统的HashMap

有关详细信息:ArrayMap Doc

答案 2 :(得分:2)

您可以使用string的hashCode - > mystring.hashCode()

答案 3 :(得分:1)

SparseArray是一个专门的类,用于将整数作为键类型的地图。他们基本上使用这个事实来保存int值而不是对Integer对象的引用(因此节省了内存)。

当密钥是任何其他类型时,使用标准HashMap没有任何内在错误。