三键Map(有两个key一个value的map):
一般系统中会用到很多字典数据,比如: pass:已审核,unaudited:未审核,reject:审核驳回,业务上这属于一种字典类型数据,这种类型就叫做audit_status,有时候我们会想通过英文转换为中文或者中文转换为英文,这时候需要写不同的方法来满足,以下类库将帮你省去这些麻烦:
HashBasedTable<String, String, String> result = HashBasedTable.create();
result.put("a","b","c");
result.put("d","e","f");
String value = result.get("d", "e");
Map<String, String> rowGetKv = result.row("a");
Map<String, String> columnGetKv = result.column("b");
Map<String, Map<String, String>> columnMap = result.columnMap();
Map<String, Map<String, String>> rowMap = result.rowMap();
System.out.println("value结果为---"+value);
System.out.println("rowGetKv结果为---"+rowGetKv);
System.out.println("columnGetKv结果为---"+columnGetKv);
System.out.println("columnMap结果为---"+columnMap);
System.out.println("rowMap结果为---"+rowMap);
value结果为---f
rowGetKv结果为---{b=c}
columnGetKv结果为---{a=c}
columnMap结果为---{b={a=c}, e={d=f}}
rowMap结果为---{a={b=c}, d={e=f}}
BiMap双映射map(也就是说可以通过value得到key也可以通过key得到value):
HashBiMap<String, String> ooHashBiMap = HashBiMap.create();
ooHashBiMap.put("a","张三a");
ooHashBiMap.put("b","张三b");
ooHashBiMap.put("c","张三c");
ooHashBiMap.put("d","张三d");
ooHashBiMap.put("e","张三e");
ooHashBiMap.forcePut("f","张三a");
String 张三a = ooHashBiMap.inverse().get("张三a");
String 张三f = ooHashBiMap.inverse().get("张三a");
System.out.println("emmmm");
BiMap的常用实现有:
1、HashBiMap: key 集合与 value 集合都有 HashMap 实现
2、EnumBiMap: key 与 value 都必须是 enum 类型
3、ImmutableBiMap: 不可修改的 BiMap
注意看put方法的使用,如果value重复的话直接使用put方法会报错,可以统一使用forcePut来达到和hashMap一样的效果, 同时要注意Bimap的value也是不允许重复的,我们直接put入相同的值会报错,用forcePut来放入值也有可能会覆盖掉key,
有些数据想最大限度的提高查询速度,则可以使用本机缓存,这个方式是最快的,毕竟redis和mysql都需要走网络,
Google Guava Cache是一种非常优秀本地缓存解决方案,提供了CacheBuilder LocalCache等工具类,
SpringBoot都垂涎guava的功能而引入了此功能caffeine,