Android 树映射和阵列映射的实际差异

Android 树映射和阵列映射的实际差异,android,dictionary,data-structures,Android,Dictionary,Data Structures,在java中,a用于字典,其中键保持排序。 在android上,一个被用作一个“内存高效”的HashMap,其中(我推断)键保持排序,因为 查找需要二进制搜索,添加和删除需要在数组中插入和删除条目 内存使用: …此容器旨在更好地平衡内存使用 它将其映射保存在数组数据结构中——每个项的哈希代码的整数数组和键/值对的对象数组。这使得它不必为地图中的每个条目创建额外的对象 …当项目从阵列中移除时,它将收缩其阵列 我们可以合理地得出结论,ArrayMap不适合存放约1000多件物品: 对于容纳数百件物品

在java中,a用于字典,其中键保持排序。 在android上,一个被用作一个“内存高效”的HashMap,其中(我推断)键保持排序,因为

查找需要二进制搜索,添加和删除需要在数组中插入和删除条目

内存使用:

…此容器旨在更好地平衡内存使用

它将其映射保存在数组数据结构中——每个项的哈希代码的整数数组和键/值对的对象数组。这使得它不必为地图中的每个条目创建额外的对象

…当项目从阵列中移除时,它将收缩其阵列

我们可以合理地得出结论,
ArrayMap
不适合存放约1000多件物品:

对于容纳数百件物品的容器,性能差异不显著,小于50%

请注意,此实现并不适用于可能包含大量项的数据结构

一般而言,使用其中一种方法的额外成本/收益是什么

  • android的
    ArrayMap
    实现线程安全吗(因此速度较慢)
  • 是否有办法影响
    数组映射中的排序
  • 番石榴中是否有类似的数据结构
  • 等等
  • 正如文档中所述,ArrayMap不是线程安全的
  • 排序总是按哈希代码键的升序进行。可以通过在key类的实现中重写hashCode()来控制顺序。当心碰撞
  • ArrayMap允许像ArrayList一样通过索引直接访问其键和值,并且可以非常高效地进行迭代。
    ArrayMap的内存消耗量是这两个内存消耗量中最小的。两者的检索复杂度都是O(logn)。在理论上,插入和删除对于ARARYMAP来说有点慢,因为它们类似于插入或删除数组中间的元素:技术上它是O(n),但它使用一个调用Stase.AlayAc文()来很快地移动所有的值。因此,如果您需要经常修改映射,ArrayMap可能不是最佳选择,但对于所有其他用例,它都非常有用。

    因此,最好将其用作不可变或不经常更改的查找表,而不是用作处理项目的数据结构