使用两个标识符(rowIndex,colIndex)比较数组的快速方法

时间:2016-06-15 17:33:05

标签: java arrays comparison

你好我正在使用一个使用块的2d地图加载器。

我正在使用此方法计算与屏幕边界相交的块的位置。

// left bottom
rect.x = x - x % chunkSize;
if (x < 0) rect.x -= chunkSize
rect.colIndex = (int) (rect.x / chunkSize);

rect.y = y - y % chunkSize;
if (y < 0) rect.y -= chunkSize;
rect.rowIndex = (int) (rect.y / chunkSize);

// right top
float x2 = x + width, y2 = y + height;

float rectX = x2 - x2 % chunkSize;
if (x2 < 0) rectX -= chunkSize;
int colIndex = (int) (rectX / chunkSize);

float rectY = y2 - y2 % chunkSize;
if (y2 < 0) rectY -= chunkSize;
int rowIndex = (int) (rectY / chunkSize);

rect.rows = rowIndex - rect.rowIndex + 1;
rect.cols = colIndex - rect.colIndex + 1;

for (int i = 0; i < rect.rows; i++) {
    for (int j = 0; j < rect.cols; j++) {
        Chunk chunk = chunkPool.obtain();
        chunk.x = rect.x + chunkSize * j;
        chunk.y = rect.y + chunkSize * i;
        chunk.rowIndex = rect.rowIndex + i;
        chunk.colIndex = rect.colIndex + j;
    }
}

信息:

  • 如果添加了Chunk,则必须加载数据,如果删除了要卸载的块数据。

  • 每次屏幕x / y / size发生变化时都会调用此方法。

我的问题是:我需要知道从最后一个数组中删除/添加的块是什么。我怎样才能做到这一点。为了识别,我会使用rowIndex / colIndex。它应该很快,因为它会被频繁调用。 HashTable可以选择吗?

1 个答案:

答案 0 :(得分:1)

哈希表只为您提供一个查找键,您需要按行和列查找值。因此,您需要创建复合键或使用类似于表的数据结构来获取所需的2个维度。恰好Guava已经在这里实现了这个:https://github.com/google/guava/wiki/NewCollectionTypesExplained#table