У меня довольно дорогой расчет массива (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 прямо. Намного медленнее.
Так что моя реализация неправильна, или я ошибся, что предварительный расчет и поиск быстрее?