检查不同 ArrayLists 的元素是否共享位置

Check if elements of different ArrayLists share position

我正在编写一个在 Java 中穿过二维板的探针。为此,我有两个整数 ArrayList,其中包含探测器所遵循的路径。第一个 ArrayList 包含 x 坐标,第二个包含 y 坐标。我想做的是检查移动的下一个图块是否已被访问,即新的 x 坐标和新的 y 坐标是否在相应的 ArrayList 中并共享相同的 position.That方式,如果新的瓷砖已经被访问过,我就不会移动到那里。我怎么可能这样做?我已经尝试使用 indexOflastIndexOf,但它不起作用,因为每个坐标都可以重复无限次。我也试过 .contains 但它也没有用,因为我需要它包含在两个数组的特定位置。

如有任何帮助,我们将不胜感激。

首先Java是面向对象的,所以你应该使用对象。为什么要将坐标存储在两个单独的数组中?

您可以定义自己的类型:

class Position implements Comparable<Position> {
  public final int x;
  public final int y;

  Position(int x, int y) { this.x = x; this.y; }
  @Override public int compareTo(Position other) { ... }
  @Override public boolean equals(Object other) { ... }
  @Override public int hashCode() { ... }
}

然后用这个你可以为所欲为,例如

Set<Position> visited = new HashSet<Position>();
Map<Position, Integer> visitedWithSpecificPositionInPath = new HashMap<Position, Integer();

等等。

一个非常混乱的方法是找到匹配 x 坐标的所有索引,并为找到的每个索引检查给定索引的 y 坐标是否等于所讨论的 y

所以给定坐标 xy 和数组列表 visitedXvisitedY 你可以这样做:

public static boolean isVisited(int x, int y){
  for(int i = 0; i < visitedX.size(), i++){
    if(visitedX.get(i) == x){
      if(visitedY.get(i) == y){
        return true;
      }
    }
   }
  return false;
}

但是正如 Jack 所提到的,您应该重新考虑您的数据结构,因为遍历完整的 x 坐标列表并不是很有效(尽管您可以使用 [=17= 减少外部 for 循环的限制] 和 visitedX.lastIndexOf(x) ).