我知道x
是一个锯齿状的数组
int x[][] = {{0,1,2,3,4},{0,1,2},{0,1,2,3}};
但是给定一个数组 a
就像
int a[] = {10,3,47,4,8};
a
是锯齿状数组吗?
最佳答案
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}
}
同样,因为“锯齿状”性要求两个子数组的长度不相等,所以一维数组不能是锯齿状的,因为它没有要比较的子数组。
关于java - 锯齿状的 Java int 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29813007/