首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java 枚举查找并不抛异常实现

问题很简单:我们应该如何通过名称或获取枚举,并忽略不存在枚举 这是我们将在示例中使用枚举。 挑选更复杂枚举是为了也可以通过其他字段展示查找枚举。 ? ?...使用Map而不是迭代集合要省力得多。这会大大提高性能吗?不,但它是一个很好习惯。在面试候选人时,你会对线性复杂度搜索算法感到满意吗?此时,你不应该让这样代码审查通过。 ? ? ?...现在通过一些额外样板,只要我们有很好散列函数的话,我们就可以进行更有效查找。稍微更冗长,但如果有办法减少样板的话,这将是极好。 ? ? ?...Guava Enums.getIfPresent(推荐) 这是一个常见用例,我们在Google朋友为此提供了一个非常干净且无需样板解决方案。...通过字段索引静态Map(较优) 与上述相同方法,但是在显示名称上而不是枚举名称上进行索引。 ? ? ?

2.2K30

本地缓存组件 Guava cache 详解

必要时候也要考虑缓存回收策略。 今天说 Guava Cache 是google guava一个内存缓存模块,用于将数据缓存到JVM内存中。...基于引用清除(Reference-based Eviction) 在构建Cache实例过程中,通过设置使用弱引用键、或弱引用、或软引用,从而使JVM在GC时顺带实现缓存清除,不过一般不轻易使用这个特性...考虑到使用软引用性能影响,我们通常建议使用更有性能预测性缓存大小限定(见上文,基于容量回收)。使用软引用缓存同样用==而不是equals比较。...自动加载 上面我们说过使用get方法时候如果key不存在你可以使用指定方法去加载这个key。在Cache构建时候通过指定CacheLoder方式。...当加载完数据后,任何线程中get方法都会获取到key对应。 统计信息 可以对Cache命中率、加载数据时间等信息进行统计。

2.4K20
您找到你想要的搜索结果了吗?
是的
没有找到

你有没有掉进去过这些 Exception “陷阱“(Part C)

要解决并发修改异常,可以使用迭代器进行遍历。...子类之间直接转换会抛出类型转换异常错误,解决这类问题可以先进行类型关系判断,通过getClass().getName()来得到具体类型,再通过instanceof进行判断是否含有继承关系,如果有继承关系再进行类型转换...,直接在控制台输出异常信息 第二种方式可以使用for循环遍历方式,遍历所有的枚举,查看是否有符合条件枚举,但是for循环效率较低 第三种方式可以使用Guava,首先在pom.xml文件中导入guava...依赖 com.google.guava guava <version...资源在使用过之后要进行关闭或者释放,如果没有释放怎会导致资源泄露问题 try finally 关闭资源问题 新增一个测试类HandlerResoucesTest,使用try-catch-finally

27010

干掉 GuavaCache:Caffeine 才是本地缓存

在本地缓存方面,SpringFramework5.0(SpringBoot2.0)放弃了GoogleGuavaCache,选择了「Caffeine」(Drop Guava caching - superseded...那么Caffeine有什么魔力,能干掉GoogleGuava呢? 压力测试 我们用数据说话。...我们在时间T访问并获取到v1,在T+5秒时候,数据库中这个已经更新为v2。但是在T+12秒,即已经过了10秒我们通过Caffeine从本地缓存中获取到「还是v1」,并不是v2。...内存占用对比 Caffeine可以根据使用情况延迟初始化,或者动态调整它内部数据结构。这样能减少对内存占用。如下图所示,使用了gradle memoryOverhead对内存占用进行了压测。...如图中数据库和搜索场景结果展示,通过考虑就近程度和频率能大大提升LRU表现。一些高级策略,像ARC,LIRS和W-TinyLFU都提供了接近最理想命中率。

1.9K40

Guava Cache 使用小结

在最近项目中,有一位新人同事使用Guava Cache 来对一个 RPC 接口响应进行缓存,我在 review 其代码时恰好发现了一个不太合理写法,遂有此文。...先简单介绍一下 Guava Cache,它是 Google 封装基础工具包 guava一个内存缓存模块,它主要提供了以下能力: 封装了缓存与数据源交互流程,使得开发更关注于业务操作 提供线程安全存取操作...(可以类比 ConcurrentHashMap) 提供常用缓存过期策略,缓存刷新策略 提供缓存命中率监控 基础使用 使用一个示例介绍 Guava Cache 基础使用方法 -- 缓存大小写转换返回...,在 load 方法中设置了一个空,后续通过手动 put + get 方式使用缓存,这种习惯更像是在操作一个 HashMap,但并不推荐在 Cache 中使用。...缓存刷新 缓存刷新常用于使用数据源覆盖缓存旧Guava Cache 提供了两类刷新机制:手动刷新和定时刷新。

1K30

本地缓存高性能之王Caffeine

说起Guava Cache,很多人都不会陌生,它是Google Guava工具包中一个非常方便易用本地化缓存实现,基于LRU算法实现,支持多种缓存过期策略。...由于Guava大量使用Guava Cache也得到了大量应用。但是,Guava Cache性能一定是最好吗?也许,曾经它性能是非常不错。正所谓长江后浪推前浪,前浪被拍在沙滩上。...我们就来介绍一个比Guava Cache性能更高缓存框架:Caffeine。...对比结论 可以从数据看出来Caffeine性能都比Guava要好。...然后CaffeineAPI操作功能和Guava是基本保持一致,并且 Caffeine为了兼容之前是Guava用户,做了一个GuavaAdapter给大家使用也是十分贴心。

2.2K1619

本地缓存性能之王Caffeine

说起Guava Cache,很多人都不会陌生,它是Google Guava工具包中一个非常方便易用本地化缓存实现,基于LRU算法实现,支持多种缓存过期策略。...由于Guava大量使用Guava Cache也得到了大量应用。但是,Guava Cache性能一定是最好吗?也许,曾经它性能是非常不错。正所谓长江后浪推前浪,前浪被拍在沙滩上。...我们就来介绍一个比Guava Cache性能更高缓存框架:Caffeine。...对比结论 可以从数据看出来Caffeine性能都比Guava要好。...然后CaffeineAPI操作功能和Guava是基本保持一致,并且 Caffeine为了兼容之前是Guava用户,做了一个GuavaAdapter给大家使用也是十分贴心。

1.2K20

重新认识下JVM级别的本地缓存框架Guava Cache(2)——深入解读其容量限制与数据淘汰策略

--- 通过《重新认识下JVM级别的本地缓存框架Guava Cache——优秀从何而来》一文,我们知道了Guava Cache作为JVM级别的本地缓存组件诸多暖心特性,也一步步地学习了在项目中集成并使用...为了解决这个问题,Guava Cache中提供了一种相对精准控制策略,即基于权重总量控制,根据一定规则,计算出每条value记录所占权重,然后以权重进行总量计算。...图片 使用约束说明 在实际使用中,这几个参数之间有一定使用约束,需要特别注意一下: 如果没有指定weight实现逻辑,则使用maximumSize来限制最大容量,按照容器中缓存记录条数进行限制;这种情况下...如果指定了weight实现逻辑,则必须使用 maximumWeight 来限制最大容量,按照容器中每条缓存记录weight累加后总weight进行限制。...这种实际使用较少,此处不多展开。 图片 主动淘汰 上述通过总体容量限制或者通过过期时间约束来执行缓存数据清理操作,是属于一种被动触发机制。

69950

Guava Cache用法介绍(极简版)

("word","Hello Guava Cache"); System.out.println(cache.getIfPresent("word")); } 看到Cache非常类似于JDK中...如果缓存中不包含key对应记录,Guava会启动一个线程执行Callable对象中call方法,call方法返回会作为key对应被存储到缓存中,并且被get方法返回。..." + cache.getIfPresent("key1")); System.out.println("第二个:" + cache.getIfPresent("key2")); System.out.println...("第三个:" + cache.getIfPresent("key3")); 设置过期时间 在构建Cache对象时,可以通过CacheBuilder类expireAfterAccess和expireAfterWrite...}); 与构建Cache类型对象类似,LoadingCache类型对象也是通过CacheBuilder进行构建,不同是,在调用CacheBuilderbuild方法时,必须传递一个CacheLoader

4K20

Guava学习:Cache缓存

摘要: 学习Google内部使用工具包Guava,在Java项目中轻松地增加缓存,提高程序获取数据效率。 一、什么是缓存?...从内存中获取数据时间明显小于通过IO获取数据,这个数据结构就是缓存实现。 这里引入一个概念,缓存命中率:从缓存中获取到数据次数/全部查询次数,命中率越高说明这个缓存效率好。...也可以采用定时刷新方式更新数据。 还可以设置移除监听器对被删除数据进行一些操作。...刷新:主动刷新方法LoadingCache.referesh(K) 信息统计:CacheBuilder.recordStats() 开启Guava Cache统计功能。...www.cnblogs.com/peida/... https://github.com/tiantianga... http://www.blogjava.net/DLevi... http://ifeve.com/google-guava

97610

使用本地缓存

(本质上本地缓存是使用Map实现,差别在于实现方式和性能) ,此篇就使用guava实现本地缓存展开叙述: 一、新建maven项目&添加依赖 新建一个通用maven工程,并添加一下guava依赖:... com.google.guava guava 18.0</version...; import com.google.common.cache.CacheBuilder; /** * guava本地缓存工具类 * * @author Typhoon * @date 2017...缓存中get方法是不允许key不存在,不存在时候会抛异常出来,但是我们实际业务场景中是允许key不存在,所以我们使用getIfpresent方法,允许key不存在 这段代码是对get方法重载,...总结 在有些场景下我们使用本地缓存更加方便和轻量级,但是任何一种事物都有其双面性,我们可以分析出本地缓存优缺点: 优点:1)使用方便 2)更轻量级 缺点:1)不适合大中型项目中高并发场景,如果强行使用

1.7K10

聊一聊Java枚举(enmu)使用

一、声明和使用基本枚举 枚举可以被认为是一个密封类语法糖,该类在编译时仅实例化了若干次,以定义一组常量。...保证返回数组中按照声明顺序: Season[] seasons = Season.values(); 注意:这个方法每次调用时都会分配一个新数组。...七、枚举多态性 当一个方法需要接受一组“可扩展”枚举时,可以像在普通类上应用多态性一样,创建一个接口,在枚举使用任何地方都可以使用这个接口: public interface ExtensibleEnum...这可能很有用,例如,在api中存在一个默认(不可修改)枚举,并且这些api用户希望用更多“扩展”枚举。...Guava库提供了一个helper方法Enums.getIfPresent(),它返回一个可选 Guava,以消除显式异常处理: DayOfWeek defaultDay = DayOfWeek.SUNDAY

1.3K20

caffe使用教程_单反使用入门教程

简介 Caffeine是一款基于jdk8实现缓存工具,在设计上参考了googleGuava cach组件,可以理解为是一个GuavaCache加强版本,性能也是在其基础上有了提升。...二、使用 因为是基于Guava cache实现,因此二者API大体是类似的,使用Guava cache开发者可以很快熟练使用Caffeine cache。...批量查找可以使用getAllPresent()方法或者带填充默认getAll()方法。...批量查找可以使用getAll()方法。默认情况下,getAll()将会对缓存中没有key分别调用CacheLoader.load方法来构建缓存(build中表达式)。...,所有缓存读写可以通过CacheWriter进行传递,比如我们可以通过CacheWriter实现方法进行第三方外部资源操作。

1.4K20
领券