java map用原生类型做key, 效率会高么


我们知道java里容器, 比如HashMap, 必须用对象引用来做key. 有时候我们会想做一个Map(int => int), 这时候就需要用到 包装类 Integer; java1.5前这样非常麻烦, 1.5后有了 自动装箱拆箱, 代码简单了很多, 不过运行时 仍对每一个int生成Integer存入, 这样: 1). 装箱拆箱需要 额外的时间; 2). 生成了大量Integer对象.

如果我们自己实现 int=> int的 hashmap, 效率会提高么.

java 讨论

killer7 11 years, 6 months ago

Android里有个工具类叫SparseArray,可以直接将int和Object做映射,类似于HashMap,但效率要高很多: SparseArray.java

UPDATE:
本回答未必是合适的答案,请看 @brayden 补充的评论。

另外,互联网上只找到一篇比较 SparseArray 和 HashMap 性能的文章: Android Performance Tweaking: ParseArray Versus Hashmap ,但是 SparseArray Addition 的 range 参数和 HashMap Addition 的 range 参数还不一样,而且我自己测试发现 SparseArray 的性能在很多组合下是要比 HashMap 差的。

可是,Android 官方言之凿凿地建议使用 SparseArray,我无语了,各位自己判断吧,反正我以后在任何情况下是不可能用 SparseArray 的!

2235760 answered 11 years, 6 months ago

Your Answer