【发布时间】: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
我知道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
整体 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}
}
同样,由于“锯齿状”要求两个子数组的长度不相等,因此一维数组不能锯齿状,因为它没有要比较的子数组。
【讨论】:
一维数组不能是锯齿状的,因为锯齿状数组是多个长度的数组的数组(如您的第一个示例中所示)。
int a[] = {10,3,47,4,8};
不是锯齿状数组。 Jagged array 上的维基百科条目说(部分)
锯齿数组,也称为不规则数组,是一种多维数组数据结构,其元素由一维数组组成,因此是“数组的数组”。
【讨论】: