Java中的记忆化有哪些不同的技术?[已关闭]

2022-09-01 20:09:47

我知道这个 http://onjava.com/pub/a/onjava/2003/08/20/memoization.html,但还有别的吗?


答案 1

要在没有参数的情况下记住函数,请使用Guava的 Suppliers.memoize(Supplier)。<对于带有参数的函数,请使用带有参数值对象的 <b11> 作为键。


答案 2

是的。使用番石榴的缓存

例:

import java.math.BigInteger;

import com.google.common.base.Preconditions;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;

public class Fibonacci {
    private static final LoadingCache<Integer, BigInteger> CACHE
            = CacheBuilder.newBuilder().build(CacheLoader.from(Fibonacci::fib));

    public static BigInteger fib(int n) {
        Preconditions.checkArgument(n >= 0);
        switch (n) {
        case 0:
            return BigInteger.ZERO;
        case 1:
            return BigInteger.ONE;
        default:
            return CACHE.getUnchecked(n - 1).add(CACHE.getUnchecked(n - 2));
        }
    }
}

推荐