不同尺寸的多维阵列

2022-09-01 20:32:44

我只是有一个想法来测试一些东西,它的工作原理:

    String[][] arr = new String[4][4];

    arr[2] = new String[5];

    for(int i = 0; i < arr.length; i++)
    {
        System.out.println(arr[i].length);
    }

输出显然是:

4
4
5
4

所以我的问题是:

  • 这种编码风格是好是坏?
  • 这对什么有好处?
  • 最重要的是,有没有办法在声明本身中创建这样的结构?
  • 也。。。为什么甚至有可能做到?

答案 1
  • 这种编码风格是好是坏?

像任何事情一样,这取决于情况。在某些情况下,交错数组(如它们所称)实际上是合适的。

  • 这对什么有好处?

好吧,用于在一个数组中存储不同长度的数据集。例如,如果我们有字符串和 ,我们可能希望将它们的字符数组存储在一个结构中。这些 char 数组具有不同的长度,因此我们将使用交错数组。"hello""goodbye"

  • 最重要的是,有没有办法在声明本身中创建这样的结构?

是的:

char[][] x = {{'h','e','l','l','o'},
              {'g','o','o','d','b','y','e'}};
  • 也。。。为什么甚至有可能做到?

因为它是 Java 语言规范 §10.6 所允许的。


答案 2
  1. 这是一种很好的编码风格,没有错。过去,我自己为不同的问题创建了交错数组。

  2. 这很好,因为您可能需要以这种方式存储数据。以这种方式存储的数据将允许您节省内存。在某些情况下,这是一种更高效地映射项目的自然方法。

  3. 在一行中,而不显式填充数组?不。这是我能想到的最接近的事情。

    int[][] test = new int[10][];
    test[0] = new int[100];
    test[1] = new int[500];
    

    这将允许您使用不同长度的数组填充行。我更喜欢这种方法来填充这样的值:

    int[][] test = new int[][]{{1,2,3},{4},{5,6,7}};
    

    因为它更具可读性,并且在处理大型不规则数组时键入更实用。

  4. 由于2中给出的原因,可以这样做。人们有正当的理由需要粗糙的数组,所以语言的创造者给了我们一种方法来做到这一点。