Java 是否有一个数据结构可以通过x或y获取值?
我有一个有很多点的数组列表,所以x,y。 我在XY上对点进行排序 是否有一种数据类型/算法可以快速获得某个x的所有y点?或者反过来说,所有x都在某个y上 目前,我有这样的东西,它可以正常工作,但我有一种感觉,它是复杂的,我需要什么Java 是否有一个数据结构可以通过x或y获取值?,java,Java,我有一个有很多点的数组列表,所以x,y。 我在XY上对点进行排序 是否有一种数据类型/算法可以快速获得某个x的所有y点?或者反过来说,所有x都在某个y上 目前,我有这样的东西,它可以正常工作,但我有一种感觉,它是复杂的,我需要什么 int lastXPos; int lastIndex; int[] workArray = new int[4096]; int workArrayIndex; // returns all the y values where x matches publi
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次,因此创建数据对象也必须很快
然后作为一个额外的问题,我们有行和列,有没有一种方法可以描述这两种情况?例如,方向。我认为快速是指使用最少的代码,而不是使用最少的CPU周期?可能是一个映射,其中键是x,值是与该x关联的所有y值的数组列表。HashMap最快,但是,如果您仍要检索按x排序的点,则树形映射将是进行排序检索的最快方法。此外,您可以使用一个列表并调用阵列,而不是拥有两个数组并自己复制它。@NPE smalles CPU Cycle听起来像一个多映射作业,其中键为x,值为Y@ajb:normal map将每X只允许一个Y