在Java中,TreeMap用于保留键排序的字典。 在android上,ArrayMap用作“内存有效”的HashMap,其中(我推断)键保持排序,因为
查找需要二进制搜索,添加和删除需要在数组中插入和删除条目
内存使用情况:
...此容器旨在更好地平衡内存使用...
它将映射保留在数组数据结构中-每个项目的哈希码的整数数组,以及键/值对的Object数组。这样可以避免必须为放置到地图中的每个条目创建一个额外的对象。
...当从其中删除项目时,它将缩小其数组...
我们可以合理地得出结论,ArrayMap
不适合容纳约1000多种物品:
对于最多容纳数百个物品的容器,性能差异并不明显,小于50%。
请注意,此实现不适用于可能包含大量项目的数据结构。
一般来说,使用一项与另一项相比会有哪些额外的成本/收益?
ArrayMap
实现线程安全(因此速度较慢)吗?ArrayMap
中的排序?答案 0 :(得分:1)
ArrayMap允许像ArrayList一样直接通过索引访问其键和值,并且可以非常有效地对其进行迭代。 ArrayMap的内存消耗最小。两者都具有O(log n)的检索复杂度。理论上,插入和删除对于ArrayMap来说要慢一些,因为它们类似于在ArrayList的中间插入或删除元素:从技术上讲,它是O(n),但它使用对System.arrayCopy()的单个调用来移动所有值马上很快。因此,如果您需要经常修改地图,则ArrayMap可能不是最佳选择,但在所有其他用例中,它都非常有能力。