关于自动装箱,Java中Map <integer,integer =“”>的有效替代方案?

时间:2015-05-23 09:23:35

标签: java android linkedhashmap autoboxing unboxing

我正在使用LinkedHashMap<Integer, Integer>来存储2D游戏中图块的图层值。较低的数字会得出更高的数字。

在我的绘图功能中,我遍历值集并绘制每个值。这意味着我将取消装箱值(width * height * numLayers)次。我打算移植到Android,所以我希望尽可能高效,而且我认为这太过分了?

我使用Map的原因是因为图层编号(键)很重要:4以上的键是通过玩家等绘制的。所以我经常需要跳过一堆键。

我可能只使用int[10],因为我不需要那么多层,但是与我当前的HashMap相比,所有未使用的层都将占用32位0,9,只占64位。

1 个答案:

答案 0 :(得分:3)

  

地图的有效替代方案?

SparseIntArraysHashMap<Integer,Integer>效率更高。根据文件

  

SparseIntArrays将整数映射到整数。不像普通的数组   整数,指数可能存在差距。它的目的是更多   内存比使用HashMap将整数映射到整数更有效,   因为它避免了自动装箱键和值及其数据   结构并不依赖于每个映射的额外条目对象。对于容纳数百件物品的容器,性能差异不显着,小于50%。

以获取更多参考click here

适用于非Android语言

  • 编写自己的基于Hash的地图类(不实现collections.Map)。使用线性探针相对简单&#39;在一组单元格中 - 另一种技术是链接列表,它(再次)将与“直接数组”一样大。选项。
  • GNU Trove has primitive maps会做你想做的事。但是,如果你不是想要记住每一个字节的内存,我建议第二个使用数组的建议。