Java 从包含ArrayList的ArrayList生成数组

Java 从包含ArrayList的ArrayList生成数组,java,arrays,arraylist,toarray,Java,Arrays,Arraylist,Toarray,我有一个问题 在Java中,我有一个ArrayList,其中包含一个带有双值的ArrayList。从这里我想制作一个double[][]数组 我知道如何通过“toArray”方法使用1D数组,但在这种情况下,我不确定如何执行ist,并且总是在代码中获得错误消息 我的Aktuell代码是: double[][] test = new double[Data.getArrayList().size()][Data.getArrayList().size()]; double[][] array =

我有一个问题

在Java中,我有一个
ArrayList
,其中包含一个带有双值的
ArrayList
。从这里我想制作一个
double[][]
数组

我知道如何通过“toArray”方法使用1D数组,但在这种情况下,我不确定如何执行ist,并且总是在代码中获得错误消息

我的Aktuell代码是:

double[][] test = new double[Data.getArrayList().size()][Data.getArrayList().size()];

double[][] array = Data.getArrayList().toArray(test);
其中Data是我的ArrayList of ArrayList。

您必须

  • 迭代外部数组列表
  • 使用toArray将每个条目转换为数组
  • 将它们逐个添加到数组中

  • 它并不漂亮,但实际上没有更好的方法来实现它。

    我会使用这样的方法(将其放在实用程序类中)

    publicstaticdouble[]to2DArray(列表输入){
    double[]output=新的double[input.size();
    对于(int i=0;i
    这可能比遍历矩阵中的每个元素都要快:

    private Double[][] to2DArray(ArrayList<ArrayList<Double>> data)
    {
        Double[][] result = new Double[data.size()][];
        Double[] temp;
        int mainIdx = 0;
        for (List<Double> arrayOfDouble : data)
        {
            temp = new Double[arrayOfDouble.size()];
            result[mainIdx++] = arrayOfDouble.toArray(temp);
        }
        return result;
    }
    
    private Double[]to2DArray(ArrayList数据)
    {
    Double[]result=新的Double[data.size();
    双[]温度;
    int mainIdx=0;
    对于(列表数组双:数据)
    {
    temp=新的双精度[arrayOfDouble.size()];
    结果[mainIdx++]=arrayOfDouble.toArray(温度);
    }
    返回结果;
    }
    
    显示
    数据的声明
    。如果它是
    ArrayList
    ,那么
    Data.getArrayList()
    将是一个编译器错误。哦。我的错。数据是我自己设计的一个类。使用方法
    Data.getArrayList
    我将数据作为
    ArrayList
    导出。但这不应该是问题所在。@LuisRamos您正在创建一个
    Double[]][]
    ,OP要求一个
    Double[][][]
    。不,这不是更快,因为你也在迭代矩阵中的每一个元素。你不是自己做,而是让
    toArray()
    为你做。你可以看到它在实现中的每个元素上迭代。是的,这是我现在尝试使用代码时遇到的问题。有没有办法将此函数与
    double[][]
    一起用作输出?但在《Priniciple》中,我想我会说路易斯·拉莫斯是对的。最好不要在循环中使用循环,我认为排列顺序更好,因为我有经验,内置方法总是比自己做快。@HansDampf获得
    双[][]
    的一种方法是使用我的答案。这个答案还包含一个循环中的一个循环,因为
    toArray()
    的实现包含一个循环。如果将
    toArray()
    的源代码与我的解决方案进行比较,您会发现
    toArray()
    在您的情况下既不快也不慢。但你是对的,如果没有必要,我们不应该重新发明轮子。@jlordo谢谢你。原则上,我现在使用的是you methode,因为正如你所说,它给了我正确的类型。什么时候更快:更好!:-)我认为有两个循环就可以了。但是当你有两个以上的循环时,也有一个美学上的争论。因为循环中有很多循环,我发现阅读源代码非常困难。如果答案正确,我更希望我的答案是正确的(返回double[][]而不是double[][]),因为它的代码行更少,没有重新发明轮子,没有单字母变量,循环中也没有循环。但这是不正确的:-)要解开双打,我需要其他东西,而不是排列。我会用@jlordo的答案表示double[]],我的答案表示double[]]。
    private Double[][] to2DArray(ArrayList<ArrayList<Double>> data)
    {
        Double[][] result = new Double[data.size()][];
        Double[] temp;
        int mainIdx = 0;
        for (List<Double> arrayOfDouble : data)
        {
            temp = new Double[arrayOfDouble.size()];
            result[mainIdx++] = arrayOfDouble.toArray(temp);
        }
        return result;
    }