java - 锯齿状的 Java int 数组

标签 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 是锯齿状数组吗?

最佳答案

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/

相关文章:

java - 接口(interface)除了拥有正确的方法之外还有其他意义吗

Java接口(interface)查询

c++ - C++ 中的二维锯齿状数组到一维数组

javascript - 如何连续 20 个月每月显示一条新消息

c# - 如何在C#中访问和重新格式化锯齿数组

Java-获取图形

java - 如何使用软断言来避免测试运行执行失败

java - ClassCastException:AdView 错误地转换为 EditText

c# - 它没有执行 else if(i==1) 中的代码,为什么会这样?

c++ - 设置/访问使用 map<string, boost::any> 制作的锯齿状 map 值