【问题标题】:How to Correctly Create a Set of a Multi-Dimensional Array如何正确创建一组多维数组
【发布时间】:2012-03-09 09:23:30
【问题描述】:

我一直在查看接口教程中的Java Tutorials,特别是CollectionsSetListQueue 等),我发现Set 不能在其元素中包含重复项。

我的问题是我不完全了解如何创建一组未知大小的多维数组。

为了填充多维数组,我将在数组中放置 1 和 0,这样每个数组都如下所示:(如果它符合我正在寻找的标准)

[ 0  1  1  0
  0  1  1  0
  0  1  0  0
  0  1  0  0
  0  0  0  0 ]

或者类似的东西。我想这可以通过声明一个多维数组来完成,例如:

int[][] array = new int[5][];

但我无法理解如何填充多个数组元素或如何使用集合完成此操作。

如果这还不够清楚,请告诉我。

【问题讨论】:

  • 列表可以包含重复项;它的值是唯一的。
  • 谢谢你告诉我,@KyleMahan。我在我的编辑中反映了这一点。
  • 不客气,但您可以使用 List 而不是 Set。 List> 是一种表示矩阵的方法,其中两个维度的大小都事先不知道。请记住,使用 List 和 int[][],没有什么可以阻止第一行有 10 个数字,而第二行有 9 个。
  • 我明白,但我正在解决的问题中不能有重复的矩阵。以这种方式正确使用 Set 吗?

标签: java arrays list multidimensional-array


【解决方案1】:

列表可以包含重复项,集合不能。您可以通过多种方式声明(动态)多维结构,这里有一种:

List<List<Integer>> multiDimensional = new ArrayList<List<Integer>>();
List<Integer> row = Arrays.asList({0, 1, 1, 0});
multiDimensional.add(row);

等等等等。要访问列表的元素,请使用get 方法,其方式类似于您对数组的操作:

Integer someVal = multiDimensional.get(0).get(3);

话虽如此,如果您的多维结构需要 100% 动态,您只需要使用这种嵌套的 List 设置,也就是您需要能够在整个逻辑执行过程中不断增长行和列。您实际上可以为多维结构使用普通数组,假设可以提前确定行数,并且每行的长度在该行初始化后不会改变。举个例子:

int[][] multiDimensional = null;

int rows = ... ;// Determine number of rows
multiDimensional = new int[rows][];

for(final int[] row: multiDimensional) {
    final int cols = ...; // Determine number of cols for this row
    row = new int[cols];
}

您可以使用通常的数组语义 (multiDimensional[0][3]) 访问元素。

【讨论】:

  • 这样可以找到row的第一个元素吗?我不明白这是怎么做到的。
  • 当然,只需在List 类上使用get 方法。请参阅对我的答案的编辑。
猜你喜欢
  • 2023-03-08
  • 1970-01-01
  • 2011-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多