每次我从数据库加载某些值时,HashMap都会从数据库中加载特定的键和值,如何使此HashMap对所有其他类可用,而不必在每次调用HashMap时重复加载这些值:
这是包含加载HashMap的方法的类:
public class Codes {
List<CODES> List = null;
private CodesDAO codesDAO = new CodesDAO(); //DAO Class
public HashMap <MultiKey,String> fetchCodes(){
MultiKey multiKey;
HashMap <MultiKey,String> map = new HashMap<MultiKey,String>();
List = codesDAO.fetchGuiCodes();//fetches codes from DB
for(CODES gui:List){
multiKey = new MultiKey(gui.getCode(), gui.getKEY());
map.put(multiKey,gui.getDESC());
}
return map;
}
}发布于 2013-04-02 21:09:27
您可以将地图保存在静态字段中,并在static块中对其进行初始化。这种方式只需要做一次:
public class Codes {
private static Map<MultiKey, String> codes;
static {
CodesDAO codesDAO = new CodesDAO(); // DAO Class
HashMap<MultiKey, String> map = new HashMap<MultiKey, String>();
List<CODES> list = codesDAO.fetchGuiCodes();// fetches codes from DB
for (CODES gui : list) {
MultiKey multiKey = new MultiKey(gui.getCode(), gui.getKEY());
map.put(multiKey, gui.getDESC());
}
codes = Collections.unmodifiableMap(map);
}
public static Map<MultiKey, String> fetchCodes() {
return codes;
}
}然后,您可以使用以下命令检索代码:
Codes.fetchCodes();发布于 2013-04-02 21:11:27
如果不能选择静态字段,您可以懒惰地进行初始化,如下所示:
private HashMap<MultiKey, String> map = null;
public HashMap<MultiKey, String> fetchCodes() {
if (map == null) {
map = new HashMap<MultiKey, String>();
list = codesDAO.fetchGuiCodes();// fetches codes from DB
for (CODES gui : list) {
MultiKey multiKey = new MultiKey(gui.getCode(), gui.getKEY());
map.put(multiKey, gui.getDESC());
}
}
return map;
}注意:这不是线程安全的,但可能需要一些额外的同步。
发布于 2013-04-02 21:06:22
可能只加载一次数据?从芭乐中使用memoization(我会):
Suppliers.memoize(//Implementation of Supplier<T>)https://stackoverflow.com/questions/15764847
复制相似问题