我有一个包含很多点的ArrayList(所以x,y)。 我在XY上对点进行了分类。
是否有数据类型/算法可以使所有y点快速获得某个x? (或者相反,某个y上的所有x)。
目前我有类似这样的东西,但是我感觉很复杂,但我感觉很复杂。
int lastXPos;
int lastIndex;
int[] workArray = new int[4096];
int workArrayIndex;
// returns all the y values where x matches
public int[] grab(int xPos) {
workArrayIndex = 0;
int startIndex = 0;
// this can increase speed a lot
if (lastXPos+1 == xPos) {
startIndex = lastIndex+1;
}
PVector v;
for (int i = startIndex; i < vecs.size(); i++) {
v = vecs.get(i);
if (v.x > xPos) {
lastIndex = i-1;
break;
}
if (v.x == xPos) {
workArray[workArrayIndex++] = (int) v.y;
}
}
lastXPos = xPos;
int[] result = new int[workArrayIndex];
for (int i = 0; i < workArrayIndex; i++) {
result[i] = workArray[i];
}
return result;
}
编辑:
还有一件事,它必须每秒处理60个新列表,因此创建数据对象也必须快速。
然后作为奖励问题,我们有行和列,有没有办法描述这两个? (例如方向)。