我有一个相当昂贵的数组计算(SpectralResponse),我希望将其保持在最低水平。我认为最好的方法是存储它们,并在将来再次需要相同阵列时将其备份。使用BasicParameters做出决定。

因此,现在,我将对象的LinkedList用于SpectralResponse的数组,并将另一个LinkedList用于BasicParameter。并且BasicParameters具有isParamsEqualTo(BasicParameters)方法来比较参数集。

LinkedList<SpectralResponse> responses
LinkedList<BasicParameters> fitParams
LinkedList<Integer> responseNumbers


因此,要查找,我只需遍历BasicParameters列表,检查是否匹配,如果匹配,则返回SpectralResponse。如果不匹配,则计算SpectralResponse。

这是我用来查找的for循环。

size: LinkedList size, limited to a reasonable value
responseNumber: just another variable to distinguish the SpectralResponse.

    for ( i = size-1; i > 0 ; i--) {
        if (responseNumbers.get(i) == responseNum)
        {
            tempFit = fitParams.get(i);
            if (tempFit.isParamsEqualTo(fit))
            {
                return responses.get(i);
            }
        }
    }


但是以某种方式,这样做不仅会占用大量内存,而且比直接计算SpectralResponse还要慢。慢得多。

因此,是我的实现错了,还是我误认为预计算和查找速度更快?

最佳答案

您正在按索引访问LinkedList,这是访问它的最糟糕的方法;)

您应该改为使用ArrayList,或对所有列表使用迭代器。

可能您应该将三个对象合并为一个,并以responseNum作为键将它们保留在地图中。

希望这可以帮助!

07-27 13:43