我有一个相当昂贵的数组计算(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作为键将它们保留在地图中。
希望这可以帮助!