【问题标题】:Is casting long to int cheaper than autoboxing long to Long?将 long 转换为 int 是否比自动装箱 long 到 Long 便宜?
【发布时间】:2012-04-04 20:47:11
【问题描述】:

我有一堆Thingy 对象,我正在使用long ID 号跟踪它们。由于我无法保证 ID 序列,因此我将它们保存在 HashMap<Long, Thingy> 中以进行随机访问。然而,在 Android 中,他们有一个非常好的类,称为 SparseArray,他们声称它比我的 HashMap 更快,因为我使用它的方式。也许最值得注意的是,它没有自动装箱税。不幸的是,密钥是int,而不是long

我的long ID 的值是这样的,我不担心本世纪任何时候都会溢出int 的范围。对于我的HashMap 操作,从longint 加上SparseArray 的优化是否会比自动装箱longLong 便宜?我的直觉说是的,但我想要一些额外的输入。

【问题讨论】:

标签: java android casting autoboxing


【解决方案1】:

嗯。将long 转换为int 可能会更快,是的,但不清楚它是否正确

【讨论】:

  • 正确性不太可能发生,但我当然知道这种可能性。不过,更改 ID 类型会影响很多地方。呜呜。我想我暂时先不管它。它工作得很好。
【解决方案2】:

long 转换为int 肯定会更快,因为它只是一个 JVM 命令 (l2i),它在使用装箱时反对内存分配和新对象创建,但是,正如 Louis 指出的那样,您正在失去精度。如果您确定您的 id 值在int 范围内,那么您可能是安全的,但我不会接受这样的假设。

我要做的是调查从 Android 源中复制 SparseArray 类的可能性,并将其修改为使用 long 键。我目前正在研究它,乍一看这绝对是可能的。

【讨论】:

  • 我想到了这个想法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 2014-04-03
相关资源
最近更新 更多