参差不齐的 Java 个 int 数组

Jagged Java arrays of int

我理解 x

中的锯齿状数组
int x[][] = {{0,1,2,3,4},{0,1,2},{0,1,2,3}};

但是给定一个数组 a 就像

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

a 是锯齿状数组吗?

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

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

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

a jagged array, also known as a ragged array, is a type of multidimensional array data structure whose elements consist of one-dimensional arrays, hence it is an "array of arrays".

综合 CS 答案

术语"jagged"(我也见过"ragged")数组是指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}};

也是一个锯齿状的数组,即使它"looks even"如果你把它画出来:

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

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

Java答案

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

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

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}
}

同样,因为 "jagged"ness 要求两个子数组的长度不相等,所以一维数组不能是锯齿状的,因为它没有要比较的子数组。