写过C的都是知道readonly。但是java里面没有。
最近遇到一个问题,当时用到一个数据库中表,经常需要查询。表的数据量不大。但是记录字段查询用到这个表的数据量超大,几百G有时几T。而且为了提高效率,和后续使用。我在配置文件中定义了一个Map,以匹配字段为key,其他值为value。把整张表缓冲到内存中。这样可以提高查询效率。
在写的时候当时有个问题。如果这个map在后续使用中数据比小心被改了。那不就跪了吗。此想法一出现,第一个反应就是map数据添加完后定义成readonly模式。 但是Map本身没有readonly方式。
想到的第一个解决方式是封装map,新类只提供get方法。但是这个方式有弊端,你写的东西别人知道是什么个鬼。第二有没有其他方式,比如jdk本身就提供了方法?当然有!第二种方法是Collections集合类。
第一种实现方式代码如下:
class MyMap<K,V> {
private Map<K,V> map =null;
public MyMap(Map<K,V> map) {
this.map = map;
}
public V get(K key) {
return map.get(key);
}
}
第二种实现方式为:
Map map1 = Collections.unmodifiableMap(map);
这里只介绍了Map实现方式,当然也有其他的集合类实现方式。对于非集合类,直接final吧。
各个集合类readonly实现方式
因为习惯了使用java中List,Set,Map等集合类所以大家基本都忽视了Collections类。其实Collections中提供了很多实用方法。建议大家多读读。下面一篇我主要介绍一个这个Collections。
作者:进击的码奴
链接:https://www.jianshu.com/p/2832e22e6ee4
共同学习,写下你的评论
评论加载中...
作者其他优质文章