【问题标题】:Unknown n multidimension array in Java [duplicate]Java中的未知n多维数组[重复]
【发布时间】:2017-03-15 13:13:06
【问题描述】:

在Java中是否可以有一个n维数组而不必显式指定维数?

即如果我想要一个二维整数数组,我会这样做:

int[][] myArray = new int[a][b];

对于上述内容,我必须指定 myArray 变量的类型为 int[][]。我要问的是是否有可能声明一个变量,它是一个 n 维数组,而不必事先知道 n。

即如果我有变量testtest 的类型可能是int[][]int[][][]int[][][][][][][][][][][] - 你明白了。我只想定义 test 而不必定义维数。

我确信上述类型会破坏 Java 中的类型系统,因此我对任何想法持开放态度,因为我认为我以错误的方式处理这个问题。

为了给您一些背景信息,我开发了一种算法来在二维整数数组中查找一个整数,这些整数按行和列按升序排序。我注意到它适用于任何维度数组,因此希望使其更通用。但是,我不想为要作为参数传递的数组的每个可能维度定义一个函数,因为维度可能(不太可能)是从 1D 到 infinityD 的任何地方——因此是个问题。

这也只是出于我自己的好奇心,是否可以对任何维度数组执行此操作。我不知道这是否可能无法使用 Java 的内置设施来完成,我最好构建自己的类系统以在这种情况下支持多维数组。

【问题讨论】:

标签: java arrays multidimensional-array


【解决方案1】:

您不能将数组定义为未知维数。但是您可以创建自己的类,例如 NDimensionalArray,它会包装另一个 NDimensionalArray 实例的数组,并实现 getValue(int index...) 和 dimension() 之类的 getter

class NDimensionalArray {
    NDimensionalArray[] arrays;

    int value;

    int getValue(int... indexes) {
        if (indexes.length == 0) return value;
        return arrays[indexes[0]].getValue(indexes[1],indexes[2],...,indexes[n-1]);
    }

    void setValue(int value, int... indexes) {
        // implement simillary to getValue
    }

    int getDimension() {
        if (arrays == 0 || arrays.length == 0) return 0;
        return arrays[0].getDimension() + 1;
    }
}

这不是一个工人阶级,而只是一个想法,创建整个结构是你自己的。您需要实施所有索引和空值检查。

【讨论】:

    猜你喜欢
    • 2015-05-02
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 2021-12-30
    • 2013-05-25
    • 2011-06-13
    • 1970-01-01
    • 2019-10-01
    相关资源
    最近更新 更多