java - 运行时指定的数组/ArrayList 的维数

标签 java arrays arraylist

假设我有一个算法可以在 n 维的棋盘上下棋,使用 {1,...,8}^n n维正方形。

给定一个 n 维数组或用于棋盘表示的 ArrayList,该算法本身在 n 维度上工作没有问题。问题是 n 是在运行时指定的。

有什么优雅的方法可以生成和使用这样一个 n 维的棋盘吗?

我想到的是一个递归函数,用于创建一个 n 维 ArrayList,如果 n == 1 则返回一个整数 ArrayList,并返回一个 ArrayList ArrayLists,其中第二组 ArrayLists 的每个 ArrayList 具有维度 n-1

但这似乎一点也不优雅......

[编辑]

在我发表评论之前似乎已被删除的答案建议生成一个列表,其中包含其他大小为 8 的列表。如果我在第一个列表中使用 8 ^ numberOfDimensions 多个列表,则此可能会起作用,但它会迫使我手动跟踪尺寸。

最佳答案

我认为一个很好的棋盘数据结构可以使用 Map。这使得可以根据 n 整数索引的 List 查找位置:

Map<List<Integer>, BoardCell> chessboard;

BoardCell 类可能也需要对其索引的引用,以便您可以检查哪些棋子威胁到其他棋子等:

class BoardCell {
   private final List<Integer> index;
   private final Figure figure;
}

生成棋盘当然很慢(指数渐近)并且通过枚举所有可能的棋盘位置来完成,您可以递归地进行。

这感觉比 ListListList 等更优雅


正如 Viliam Búr 在评论部分建议的那样,使用 Map 数据结构可以让您仅跟踪相关的棋盘单元格。这种类型的数据结构称为 Sparse代表。

关于java - 运行时指定的数组/ArrayList 的维数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19537621/

相关文章:

java - 在 Java 中更改字符串颜色

java - Drools:使用在 session 创建时为新插入的规则定义的全局变量

java - 在java中使用选择排序对整数数组进行排序。找不到我的错误

java - 当请求的索引越界时返回什么

java - ArrayList add() 方法不起作用。无法添加另一个值并将其添加到 jTable

java - 如何有条件地替换 Collection 中的值,例如 replaceIf(Predicate<T>)?

java - 如何有效地使用 InterruptedException

java - 将文本文件中的一行整数(带空格)读取到数组中? ( java )

c - 具有枚举类型的多维数组并将它们转换为无符号字符数组

java - 如何将代码页为 1250 的字符串保存到 Java 中的 RandomAccessFile