如何在Java中获取多维数组的任何维度的长度?

时间:2014-07-02 14:00:35

标签: java arrays multidimensional-array

JDK或流行的库中是否有现成的实现?

我写了以下函数:

public static int length(Object array, int level) {
        if( level < 0 ) {
            throw new IllegalArgumentException();
        }
        else if( level == 0 ) {
            if( !array.getClass().isArray() ) {
                throw new IndexOutOfBoundsException();
            }
            else {
                return Array.getLength(array);
            }
        }
        else {
            if( !array.getClass().isArray() ) {
                throw new IndexOutOfBoundsException();
            }
            else {

                int length = Array.getLength(array);
                int nextlength, maxnextlength = 0;
                Object element;
                for(int i=0; i<length; ++i) {
                    element = Array.get(array, i);
                    if( element != null ) {
                        nextlength = Array.getLength(element);
                        if( nextlength > maxnextlength ) {
                            maxnextlength = nextlength;
                        }
                    }
                }
                return maxnextlength;
            }
        }
    }

是正确和最佳的吗?

2 个答案:

答案 0 :(得分:0)

查看java.util.Arraysjava.lang.reflect.Array。它们具有可以帮助您的功能。至少你的方法可能会缩短。

答案 1 :(得分:0)

  1. 这是一项非常昂贵的操作...你确定你无法避免吗? 你暗示你将扫描整个多维度 排列到你想要长度的深度!
  2. 看起来像递归算法最适合这个
  3. 如果你想让它递归,请考虑广度优先或 深度优先(如果水平超过2)(这只会有助于明确写作......这对优化没有帮助,因为没有太多优化空间)