【问题标题】:Java: Searching in an array of objects, for 2 specific object valuesJava:在对象数组中搜索 2 个特定对象值
【发布时间】:2011-05-06 05:34:07
【问题描述】:

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

但是,我怎样才能快速搜索数组,而无需执行 for 循环并非常耗时地检查每个单独的值?

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

非常感谢。

【问题讨论】:

  • I have created a class of Cell which has protected integers X & Y; Upon initialization, i do a for loop which sets an array of cell by multiplying the X & Y given by the user 是那些不同的 X 和 Y?

标签: java arrays search object binary


【解决方案1】:

这样做的方法是在数组中排列 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,它允许您以cells[i-1][j-1] 的形式访问单元格(例如)。如果矩阵稀疏(即缺少单元格),则可以设计更复杂的表示,以使用更少的空间,但代价是更复杂的代码和更慢的访问时间。

【讨论】:

    【解决方案2】:

    听起来(如果您想使用二进制搜索,无论如何)您正在将元素 0 设置为具有 x = 0, y = 0 的单元格;元素 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];
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2017-07-22
        • 1970-01-01
        • 2021-12-12
        • 2021-05-26
        • 2021-09-03
        • 1970-01-01
        • 2012-11-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多