实现具有偏移量的数组以减少数组长度

时间:2017-08-22 19:24:57

标签: java arrays performance

上下文

您好,我正在制作一个以地形为块的Java游戏。 (3d块,但这并不重要,我想专注于单一维度,以使任务更简单)

我在考虑如何在没有HashMap但存在某种数组的情况下存储块,因为这是性能敏感的代码,而HashMap并不是理想的选择。我得出结论,具有开始/偏移的数组将是理想的。为什么?块通常在一个组中,但这个组可以从一个非常大或/和负数开始。

情况示例:

现在用开始/偏移的意思最好用一个例子来描述。

位置/元素

100000 / foo
100001 / bar
100002 / foobar

我可以创建一个大小为3且偏移量为100000的数组,而不是创建一个大小为100003的数组.get方法如下所示:

int offset=...; //set as items are added but in this example it would be 100000
T[] data;

<T> T get(int pos){
  if(pos<offset || pos>=offset+data.length)return null;
  return data[pos - offset];
}

问题:

我已经体验到以有效的方式实现这一目标的任务非常困难。现在我想知道是否有任何方法可以用java或库中的现有类来完成。

说实话,我不相信这种性能敏感的代码。 (主要处理数组大小和偏移量)

1 个答案:

答案 0 :(得分:1)

这或多或少是稀疏矩阵的要求。

参见例如Sparse matrices / arrays in Java