参差不齐的 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 要求两个子数组的长度不相等,所以一维数组不能是锯齿状的,因为它没有要比较的子数组。
我理解 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 要求两个子数组的长度不相等,所以一维数组不能是锯齿状的,因为它没有要比较的子数组。