Java 内存友好型ArrayList到2D数组double的转换

Java 内存友好型ArrayList到2D数组double的转换,java,memory,type-conversion,Java,Memory,Type Conversion,关于性能和内存分配的问题。我有一个返回ArrayList的代码,我想转换为double[]。问题是,因为我必须得到2D数组的尺寸,第二种方法没有创建中间变量特征,它是否更便于内存 更具体地说,lbpFeatures.getFeatures.size和lbpFeatures.getFeatures.get0.length将此方法运行两次加1,初始赋值为lbpddescriptions=lbpFeatures.getFeatures part或java是否足够智能,只需执行一次,因为这是我想要的方法

关于性能和内存分配的问题。我有一个返回ArrayList的代码,我想转换为double[]。问题是,因为我必须得到2D数组的尺寸,第二种方法没有创建中间变量特征,它是否更便于内存

更具体地说,lbpFeatures.getFeatures.size和lbpFeatures.getFeatures.get0.length将此方法运行两次加1,初始赋值为lbpddescriptions=lbpFeatures.getFeatures part或java是否足够智能,只需执行一次,因为这是我想要的方法,并从中确定维度

//first approach
        List<double[]> features = lbpFeatures.getFeatures();
        LBPdescriptions = features.toArray(new double[features.size()][features.get(0).length]);

//second approach        
        LBPdescriptions = lbpFeatures.getFeatures().toArray(new double[lbpFeatures.getFeatures().size()][lbpFeatures.getFeatures().get(0).length]);

如果存在差异,我不希望它在JIT编译器访问它之后出现很长时间。此外,就内存而言,唯一的区别是创建一个引用,如果内存可用,它将占用32或64位。因此,差异基本上是微不足道的。在实践中,这两种方法是完全相同的,只是它们都没有达到应有的效率:您应该使用新的double[features.size][]。@Louis Wasserman如果这是真的,那么lbpFeatures.getFeatures方法中应该有3次调用。是这样吗?否则,我看到的唯一缺点是,java对第二维度的隐式计算比显式计算要快。你指的是这个吗?a这些版本都不会多次调用getFeatures,包括我的建议。b您的版本将创建数组的空行,然后丢弃它们,而不是填充它们;我的建议将避免完全不必要的分配。因此,在我的例子中创建了一个临时数组!这就是为什么我经常在1D版本中看到toArraynew double[0]?谢谢,我想知道这是为什么。