当前位置: 首页 > wzjs >正文

成都官方网站建设seo排名优化推广

成都官方网站建设,seo排名优化推广,如何判断网站是不是自适应,常德市 网站建设在平常开发中,我们经常遇到这样一类过程:有一定计算量,被频繁调用,但对于任意一个参数,结果是恒定的(换句话说,就是纯函数),为了减少频繁调用的性能开销,我们…

在平常开发中,我们经常遇到这样一类过程:有一定计算量,被频繁调用,但对于任意一个参数,结果是恒定的(换句话说,就是纯函数),为了减少频繁调用的性能开销,我们可能会写出这样的代码:

public class ExampleUnitTest {Map<Integer, String> cacheMap = new HashMap<>();public String doTaskWithCache(Integer i) {String s = cacheMap.get(i); // 先检查是否有缓存if (s == null) {s = calculateResult(i);cacheMap.put(i, s);  // 计算结果存到缓存里}return s;}
}

但是,这样写的话,每次有需要带缓存的函数,创建缓存以及检查结果是否已缓存的那代码就得重写一遍,想想就有些麻烦,本文就介绍一个简单的工具Memorizer来简化这个过程。

Memorizer 的实现

因为实现代码比较少,我们看实现代码

public class Memorizer<T, V> {public static <T, V> Function<T, V> memorize(Function<T, V> function) {Map<T, V> cacheMap = new HashMap<>();return (T t) -> Optional.ofNullable(cacheMap.get(t)).orElseGet(() -> {V value = function.apply(t);cacheMap.put(t, value);return value;});}public static <T, V> Function<T, V> weakMemorize(Function<T, V> function) {Map<T, V> cacheMap = new WeakHashMap<>();return (T t) -> Optional.ofNullable(cacheMap.get(t)).orElseGet(() -> {V value = function.apply(t);cacheMap.put(t, value);return value;});}
}

这个工具有两个方法,都接受一个单参函数作为参数,并返回一个同类型的单参函数,意思是:传入要缓存的函数,返回该函数的带缓存的版本。

weakMemorize方法返回的函数的缓存可能会被回收,适合那些内存资源紧张或者想减少内存压力的场景,不过这也会导致一定概率的缓存失效的情况。

Memorizer 的使用

我们用``来改写上面的例子,就成了:

public class ExampleUnitTest {private Function<Integer, String> doTaskWithCache = (i) -> calculateResult(i);
}

写在最后

这里只给出了单参数的实现,如果要考虑多参数的缓存,可以尝试用下面这种方式扩展:

public class Memorizer<T, V> {public static <T1, T2, V, K> BiFunction<T1, T2, V> memorize(BiFunction<T1, T2, V> function, BiFunction<T1, T2, K> keyExtractor) {Map<K, V> cacheMap = new HashMap<>();return (t1, t2) -> {K key = keyExtractor.apply(t1, t2);return Optional.ofNullable(cacheMap.get(key)).orElseGet(() -> {V value = function.apply(t1, t2);cacheMap.put(key, value);return value;});};}public static <T1, T2, V, K> BiFunction<T1, T2, V> weakMemorize(BiFunction<T1, T2, V> function, BiFunction<T1, T2, K> keyExtractor) {Map<K, V> cacheMap = new WeakHashMap<>();return (t1, t2) -> {K key = keyExtractor.apply(t1, t2);return Optional.ofNullable(cacheMap.get(key)).orElseGet(() -> {V value = function.apply(t1, t2);cacheMap.put(key, value);return value;});};}
}
http://www.dtcms.com/wzjs/187209.html

相关文章:

  • 重庆建设工程信息网官网首页入口seo优化评论
  • 手机做点击赚钱的网站游戏优化大师下载安装
  • app策划书模板网站如何优化
  • 建网站视频教程快照关键词优化
  • 怎么免费创建网站广州今天新闻
  • 福州做企业网站2021近期时事新闻热点事件简短
  • 网站出现建设中本溪seo优化
  • 番禺网站建设专家标题关键词优化技巧
  • 做美食下载什么网站上海网站推广广告
  • 小说主角王烨建设优化网站
  • 课程网站建设ppt模板下载云南网站建设快速优化
  • 越南网站 后缀网站收录提交工具
  • 水利部建设经济定额站网站线上推广方案
  • python做网站效率百度权重是什么意思
  • 广州比较好的网站建设公司seo查询网站
  • 政府网站建设自助建站平台精准引流怎么推广
  • 酒店网站建设案例策划书怎么写万网域名查询接口
  • 怎么选择网站开发群排名优化软件官网
  • 网站建站业务门户网站有哪些
  • 国际新闻最新消息十条摘抄2022关键词seo培训
  • 做盗链电影网站怎么样百度一下 你知道首页
  • 给你一个网站你怎么做的吗百度统计工具
  • 建设购物网站流程图网络营销策划推广方案
  • WordPress数据库搬迁重庆网站seo费用
  • 专业做全景图的网站平台微信公众号运营
  • wordpress调用目录下seo关键词优化软件app
  • 北京做网站哪个公司好竞价推广运营
  • 中国珠宝设计师网郑州网站seo服务
  • 上海专上海专业网站制作公司免费的网络推广平台
  • 网站建设方案模板高校指数函数运算法则