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

Java 使用两个标识符(rowIndex、colIndex)快速比较数组的方法,java,arrays,comparison,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)

你好,我正在使用块的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;
    }
}
//左下角
rect.x=x-x%chunkSize;
如果(x<0)rect.x-=chunkSize
rect.colIndex=(int)(rect.x/chunkSize);
rect.y=y-y%chunkSize;
如果(y<0)rect.y-=chunkSize;
rect.rowIndex=(int)(rect.y/chunkSize);
//右上方
浮动x2=x+宽度,y2=y+高度;
float rectX=x2-x2%chunkSize;
如果(x2<0)rectX-=chunkSize;
int colIndex=(int)(rectX/chunkSize);
float rectY=y2-y2%chunkSize;
如果(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
信息:

  • 如果添加了块,则必须加载数据;如果删除了块,则必须卸载块数据

  • 每当屏幕
    x/y/size
    发生更改时,都会调用此方法


我的问题是:我需要知道从最后一个数组中删除/添加了哪些块。我该怎么做呢。为了识别,我将使用
行索引/colIndex
。它应该很快,因为它会被频繁调用。哈希表可以作为选项吗?

哈希表只提供一个键用于查找,您需要按行和列查找值。因此,您需要创建一个复合键或使用类似于表的数据结构来获得所需的两个维度。恰巧Guava已经在这里实现了这一点:

您知道是否允许使用负索引值吗?是的,只要符合索引键的类型,任何索引都是有效的