繁体   English   中英

Java:在对象数组中搜索2个特定的对象值

[英]Java: Searching in an array of objects, for 2 specific object values

我正在用Java做一个包含(x,y)坐标的项目。 我创建了一个具有保护整数X和Y的Cell类; 在初始化时,我做一个for循环,它通过乘以用户给出的X和Y来设置一个单元格数组,比如X = 10和Y = 10,我创建一个单元格数组[100]。

但是,如何快速搜索数组,而不进行for循环并及时检查每个单独的值?

假设我正在寻找包含X = 5&y = 3的对象。我知道我可以通过for循环查找值为x和y的对象,但我想知道是否有办法做二进制搜索并找到包含X = 5和Y = 5的对象[i]“快一点”。

非常感谢你。

这听起来像(如果你想使用二进制搜索),你将元素0设置为x = 0, y = 0的Cell; 元素1到x = 0, y = 1等。如果是这样,你应该能够轻松计算给定Cell的精确索引:

// contains the Cell with x = desiredX, y = desiredY
yourArray[desiredX * X + desiredY];

但是,如果这是您要执行的操作,则制作二维数组可能会更简单:

yourArray = new Cell[X][Y];
...
yourArray[desiredX][desiredY];

执行此操作的方法是以某种方式排列数组中的Cell对象,以便从X,Y坐标到数组中Cell的索引之间进行简单映射。

例如,让我们假设X和Y从1到10。假设我们然后排列像元,这样:

array[0] = Cell(1, 1);
array[1] = Cell(1, 2);
...
array[9] = Cell(1, 10);
array[10] = Cell(2, 1);
array[11] = Cell(2, 2);
...
array[99] = Cell(10, 10);

应该很容易看出我们可以计算数组中Cell(i,j)的索引并按如下方式获取单元:

public Cell getCell(Cell[] array, int i, int j) {
    int index = (10 * (i - 1)) + (j - 1);
    return array[index];
}

支持N维数组类型的编程语言通常使用这种方法来实现它们。

这可以通过简单的修改来处理以下情况:

  • 常数10是别的东西
  • 矩阵不是正方形,
  • 矩阵有两个以上的维度
  • 索引从0到N - 1而不是从1到N
  • 诸如此类

您可以使用多种其他方式来表示Java中的二维矩阵。 最简单的方法就是使用Cell[][] cells ,该Cell[][] cells使您可以将单元格作为cells[i-1][j-1] 可以设计更复杂的表示形式,如果矩阵稀疏(即缺少单元格),则使用较少的空间,但代价是更复杂的代码和更慢的访问时间。

以上两个答案显示了快速获取数组索引的简单方法。 我想提出一个具有键,值配对的替代使用哈希映射。 该值可以是对象。 访问hashmap元素以恒定时间运行..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM