我有一堆Thingy
个对象,我正在跟踪使用long
ID号码。由于我不保证ID序列,我将它们保存在HashMap<Long, Thingy>
中以进行随机访问。但是,在Android中,他们有一个名为SparseArray
的非常好的类,他们声称比我的HashMap
更快,因为我正在使用它。也许最值得注意的是,它没有自动装箱税。不幸的是,密钥是int
,而不是long
。
我long
ID的值是这样的,我不担心本世纪任何时候溢出int
的范围。对于我的long
操作,从int
到SparseArray
以及long
优化的转换是否比自动装箱Long
到HashMap
更便宜?我的直觉是肯定的,但我想要一些额外的意见。
答案 0 :(得分:3)
庵。将long
投射到int
可能会更快,是的,但不清楚它是否正确。
答案 1 :(得分:1)
将long
转换为int
肯定会更快,因为它只是一个JVM命令(l2i),与使用装箱时内存分配和新对象创建相反,但是,正如路易斯指出的那样,你是失去精确度。如果您确定自己的ID值在int
范围内,那么您可能会安全,但我不会采用这样的假设。
我要做的是研究从Android源复制SparseArray类并将其修改为使用long
键的可能性。我目前正在关注它,乍一看这绝对是可能的。