【问题标题】:Jagged Java arrays of int锯齿状 Java 数组 int
【发布时间】:2015-07-01 00:32:24
【问题描述】:

我知道x是一个锯齿状数组

int x[][] = {{0,1,2,3,4},{0,1,2},{0,1,2,3}};

但是给定一个数组a 喜欢

int a[] = {10,3,47,4,8};

a 是锯齿状数组吗?

【问题讨论】:

    标签: java jagged-arrays


    【解决方案1】:

    整体 CS 答案

    术语“锯齿状”(我也见过“锯齿状”)数组指的是a multi-dimension array (>1) where each element is an array。因此

    int[] a = {1,2,3};
    

    不是交错数组,而是

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

    是。然而,与直觉相反,

    int[][] a = {{1,2,3,4}, {5,6,7,8}};
    

    也是一个锯齿状数组,即使你画出来它“看起来很均匀”:

    int[][] a = {
        {1,2,3,4},
        {5,6,7,8}
    };
    

    这是因为其他编码语言(如 c#)区分多维数组和交错数组。在那些语言中,“锯齿状”不是对所讨论数组的当前结构的描述,而是它完全是什么类型的对象。 See the difference between the two here

    Java 答案

    与其他语言不同,Java 只允许给定类型的单个数组。因此int[][] 类型实际上是“int[] 的数组”。所以Java doesn't support true multi-dimensional arrays, it only has jagged arrays

    因此,术语“锯齿状”数组在传统的 java 语言中具有不同的含义。由于所有维度 > 1 的数组都是真正的锯齿状,因此术语“锯齿状”意味着维度 > 1 的数组,其子数组的长度不同。因此,以下数组是“锯齿状”的,因为第一个和第二个子数组是不等长:

    int[][] a = {{1,2,3,4}, {5,6,7}}
    

    因为这相当于:

    {
        {1, 2, 3, 4}, //Length 4
        {5, 6, 7} //Length 3
    }
    

    这个数组也会被认为是锯齿状的:

    {
        {1, 2, 3, 4}, //Length 4
        {11, 12, 13, 14}, //Length 4
        {21, 22, 23, 24}, //Length 4
        {31, 32, 33, 34}, //Length 4
        {5, 6, 7} //Length 3
    }
    

    即使以下是技术意义上的锯齿状数组,但通常不会这样称呼它:

    int[][] a = {
        {1,2,3,4},
        {5,6,7,8}
    }
    

    同样,由于“锯齿状”要求两个子数组的长度不相等,因此一维数组不能锯齿状,因为它没有要比较的子数组。

    【讨论】:

      【解决方案2】:

      一维数组不能是锯齿状的,因为锯齿状数组是多个长度的数组的数组(如您的第一个示例中所示)。

      int a[] = {10,3,47,4,8};
      

      不是锯齿状数组。 Jagged array 上的维基百科条目说(部分)

      锯齿数组,也称为不规则数组,是一种多维数组数据结构,其元素由一维数组组成,因此是“数组的数组”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-02
        • 1970-01-01
        • 1970-01-01
        • 2015-09-23
        • 2013-06-21
        • 2015-05-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多