我有一个相当昂贵的数组计算(SpectralResponse),我希望将其保持在最低限度。我认为最好的方法是存储它们并在将来再次需要相同的阵列时将其恢复。使用 BasicParameters 做出决定。
所以现在,我为 SpectralResponse 的数组使用对象的 LinkedList,为 BasicParameter 使用另一个 LinkedList。并且 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 慢。慢得多。
所以是我的实现错了,还是我误以为预先计算和查找更快?