- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想知道 SparseArray
和 HashMap
之间的性能和效率,以及哪个更好用。我无法理解何时使用 SparseArray
以及何时使用 Hashmap
最佳答案
SparseArray
是当您的映射键是一个整数时您应该做出的选择,并且这些整数不是连续的,这意味着不是 0、1、2、3、4、... n - 但是更像是 43、2045、12、5。
现在,让我们暂时假设您的键是整数,但也是连续的(0、1、2、3、4、... n)。在这种情况下,最好的收藏选择是什么?好吧,让我们假设您的值是 Strings
。在这种情况下,最好的选择是 String
数组 (String[]
)。这样做的原因是 String
数组可以满足您的所有需求,同时对性能的影响最小。
myStringArray[0]
将返回键“0”的 String
值,依此类推。
SparseArray
的工作原理与此完全相同,除了我们允许数组中的某些值为空(因此,“稀疏”)。 SparseArray
将在幕后创建一个大数组,并使用整数键作为数组的索引,其中放置值。
本质上,HashMaps
也以这种方式工作 - 在幕后有一个用于放置值的大整数数组。唯一的区别是在 HashMaps
中,键不是整数,它们可以是任何东西。为了我们的示例,假设键是 Strings
。 HashMap
将使用散列函数将此 String
键转换为整数,然后使用它来定位数组中的值。这可能会导致两个不同的 Strings
产生相同整数的情况。在这些情况下,HashMap
将执行其他操作,例如在数组中对值进行排队,或生成新键等。这以及通过哈希函数生成整数键有时会涉及相当多的性能。
SparseArray
允许您完全跳过这一步,因为使用整数键时,这些都不是必需的,因此效率更高。
关于android - SparseArray 和 Hashmap 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40236489/
我必须使用两个键和一个值来实现类似于 Hashmap 的分类,比方说 Hashmap ,其中两个键是整数,值是我定义的通用 MyObject。 我读了this , this , 和 this发布,我也
我需要使用散列图在我的 Android 应用程序中存储键/值(可能有数千个),但我知道我应该使用 SparseArray 以节省内存。但是,我的 key 必须是一个字符串。有没有办法创建 Sparse
如何初始化一个static,android.util.SparseArray 的不可修改的实例? ? 最佳答案 这是使用匿名类的更好方法: static final SparseIntArray my
我正在使用 HashMap 实现位图缓存并在 Eclipse 中收到以下警告: Use new SparseArray(...) instead for better performance. 我以前
有没有办法迭代 Java SparseArray(适用于 Android)?我使用 sparsearray 轻松地按索引获取值。我找不到。 最佳答案 似乎我找到了解决方案。我没有正确注意到 keyAt
问题 Julia 有没有有效的方式 从给定的条目列表 (u,v,w) 构建一个巨大的稀疏矩阵 ,其中一些可以具有 相同地点 (u,v),在这种情况下,它们的权重 w 必须是 求和 .因此u,v,w是输
所以我正在编写一些非常简单的代码,并发现了非常意外的行为。所有 List 和 Map 实现都使用节点的 equals 方法来比较它们。因此,如果您有一个字符串列表,并且您想尝试获取列表中字符串的索引,
是否可以通过仅提供密集条目来初始化 pandas SparseArray?我无法从文档中弄清楚这一点:http://pandas.pydata.org/pandas-docs/stable/spars
嗨,我有一个简单的函数调用: RemoveSpecific(sheetType); // String sheettype 我希望它与 SparseArray 一起调用,因为我将根据 sheetTy
难道这不可能吗?如果没有,那么有没有类似的方法? public abstract class BaseItem { } public class SpecificItem extends BaseIt
我最近开始使用 Android SparseArray 代替 ArrayList 来处理少量项目。我想知道为什么它不像普通 ArrayList 那样包含 toArray() 方法?它包含一个用于值的私
我想使用 putExtra 将我的数据从 Activity1 发送到 Activity2。 我的自定义对象实现了 Serializable : public class ARObjectCategor
我使用针对用户名列表的唯一 int id 列表作为快速查找表,并决定使用 sparseArray 但我希望能够不时打印以记录整个列表以进行调试. SparseArray 不可迭代并且与 util.Ma
当整数键是资源 ID 时,是否建议使用 SparseArray ?或者它是针对数字较小的键? 是的,我知道 SparseArray 的定义,并且当使用带有整数键的 ArrayList 时,编译器总是发
如下图所示,latLng 等于 latlng1,但 indexOfValue() 返回不同的值。 这是为什么? 最佳答案 在内部,SparseArray 将值保存在 Objects 数组中。在 ind
我尝试用谷歌搜索这个警告,似乎找到了其他警告,但似乎有点不对劲。 Type safety: The method put(int, Object) belongs to the raw type Sp
我正在尝试从队列中获取结果,对其进行处理并在之后将其删除。但是我在访问 null key 的情况下遇到了 Java 异常,见下文 int key = 0; int size = mQueue.size
我想知道在 SparseArray 类的 HashMap 类上是否有与 putAll 方法等效的方法? 我很困惑是否应该使用 append、put 或 setValueAt 以及它是否会给我相同的结果
我如何通过 Moshi 将 SparseArray 序列化为 JSON?我真的不明白如何为此制作正确的适配器,感谢任何帮助。 编辑:我已经通过这段代码让它工作了 class SparseArrayJs
我想知道 SparseArray 和 HashMap 之间的性能和效率,以及哪个更好用。我无法理解何时使用 SparseArray 以及何时使用 Hashmap 最佳答案 SparseArray 是当
我是一名优秀的程序员,十分优秀!