具有不同大小的多维数组

Lok*_*oki 15 java arrays multidimensional-array

我只是有一个想法来测试一些东西并且它有效:

    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);
    }
Run Code Online (Sandbox Code Playgroud)

输出显然是:

4
4
5
4
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  • 这是编码的好坏吗?
  • 这有什么用呢?
  • 最重要的是,有没有办法在声明本身中创建这样的结构?
  • 还有......为什么甚至可以做到?

ars*_*jii 21

  • 这是编码的好坏吗?

像任何事情一样,这取决于具体情况.在某些情况下,锯齿状数组(因为它们被称为)实际上是合适的.

  • 这有什么用呢?

那么,用于在一个阵列中存储具有不同长度的数据集.举例来说,如果我们有弦"hello""goodbye",我们可能希望将自己的字符数组存储在一个结构.这些char数组具有不同的长度,因此我们将使用锯齿状数组.

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

是:

char[][] x = {{'h','e','l','l','o'},
              {'g','o','o','d','b','y','e'}};
Run Code Online (Sandbox Code Playgroud)
  • 还有......为什么甚至可以做到?

因为它是Java语言规范允许的,§10.6.


Wil*_*son 11

  1. 这是一种很好的编码风格,它没有任何问题.我自己为过去的不同问题创建了锯齿状阵列.

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

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

    int[][] test = new int[10][];
    test[0] = new int[100];
    test[1] = new int[500];
    
    Run Code Online (Sandbox Code Playgroud)

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

    int[][] test = new int[][]{{1,2,3},{4},{5,6,7}};
    
    Run Code Online (Sandbox Code Playgroud)

    因为在处理大型不规则数组时输入更具可读性和实用性.

  4. 由于2中给出的原因可以做到这一点.人们有充分理由需要参差不齐的数组,因此语言的创建者给了我们一种方法.