gpt4 book ai didi

Java:设置未知数量条目的数组长度

转载 作者:行者123 更新时间:2023-12-01 07:42:40 25 4
gpt4 key购买 nike

我正在尝试填写 RealVector (来自 Apache Commons Math)和值。我尝试使用类(class)的 append方法,但实际上并没有添加任何东西。所以现在我正在使用 double[] ,效果很好,只是我事先不知道数组需要有多大。

private void runAnalysis() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
Double attr;
double[] data = new double[100]; // TODO: bad.

int i = 0;
for (Method m : ParseTree.class.getMethods()) {
if (m.isAnnotationPresent(Analyze.class)) {
attr = (Double) m.invoke(this);
analysis.put(m.getAnnotation(Analyze.class).name(), attr);
data[i++] = attr * m.getAnnotation(Analyze.class).weight();
}
}

weightedAnalysis = new ArrayRealVector(data);
}

我该如何处理这个问题?以下是我的想法:

  1. 遍历类并使用注释对方法进行计数,然后使用该大小来初始化数组。然而,这将需要一个额外的循环,并且反射是性能密集型的。 (对吗?)

  2. 为数组选择任意大小,如果空间耗尽,则将其加倍。缺点:需要更多代码行

  3. 使用List<Double> ,然后以某种方式隐藏 Double对象返回doubles这样它们就可以放在 RealVector 中。列表使用更多内存。

  4. 只需为起始数组选择一个巨大的大小,并希望它永远不会溢出。缺点:这会引发 arrayindexoutofbound 错误。

  5. 或者我只是使用 append(double d)错误的?

    private void runAnalysis() 抛出 IllegalArgumentException、IllegalAccessException、InitationTargetException { 双重属性; 加权分析 = new ArrayRealVector(data);

    for (Method m : ParseTree.class.getMethods()) {
    if (m.isAnnotationPresent(Analyze.class)) {
    attr = (Double) m.invoke(this);
    analysis.put(m.getAnnotation(Analyze.class).name(), attr);
    weightedAnalysis.append(attr * m.getAnnotation(Analyze.class).weight());
    }
    }

    }

最佳答案

RealVector.append() 不会修改 vector ,而是构造一个新 vector :[RealVector.append() 的 Java 文档](http://commons.apache.org/math/apidocs/org/apache/commons/math/linear/RealVector.html#append(double)) 解释:

append

RealVector append(double d)
Construct a vector by appending a double to this vector.
Parameters:
d - double to append.
Returns:
a new vector

请注意,使用RealVector构造 vector 是一项相当昂贵的操作,因为append()需要一遍又一遍地复制元素(即以您解释的方式构造数组,运行时间为 O(n^2)

我建议简单地使用java的ArrayList<Double>在构造过程中,然后简单地转换为 RealVector或您喜欢的任何其他数据抽象。

关于Java:设置未知数量条目的数组长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1834428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com