具有不同大小的多维数组

时间:2013-08-01 15:00:02

标签: 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);
    }

输出显然是:

4
4
5
4

所以我的问题是:

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

3 个答案:

答案 0 :(得分:20)

  
      
  • 编码风格是好还是坏?
  •   

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

  
      
  • 这有什么用呢?
  •   

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

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

是:

char[][] x = {{'h','e','l','l','o'},
              {'g','o','o','d','b','y','e'}};
  
      
  • 另外......为什么甚至可以这样做?
  •   

因为Java语言规范允许§10.6

答案 1 :(得分:11)

  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中给出的原因可以做到这一点。人们有正当理由需要参差不齐的数组,因此该语言的创建者为我们提供了一种方法。

答案 2 :(得分:1)

(1)虽然在技术上/功能上/语法上没有任何错误,但我会说这是错误的编码风格,因为它打破了对象初始化提供的假设(String [4] [4])。这最终取决于用户的偏好;如果你是唯一阅读它的人,而且你确切知道你在做什么,那就没关系。如果其他人共享/使用您的代码,则会增加混淆。

(2)我能想到的唯一概念是你有多个数组要读入,但事先并不知道它们的大小。但是,在这种情况下使用ArrayList<String>会更有意义,除非增加的开销是一个严重的问题。

(3)我不确定你在这里问的是什么。你的意思是,你能以某种方式在初始声明中指定单个数组长度吗?答案是否定的。

(4)可以扩展和缩小原始数组长度,因为在幕后,你只需要分配和释放内存块。