首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从应用程序的任何部分访问HashMap或ArrayList?

如何从应用程序的任何部分访问HashMap或ArrayList?
EN

Stack Overflow用户
提问于 2013-04-02 21:03:59
回答 5查看 1.1K关注 0票数 1

每次我从数据库加载某些值时,HashMap都会从数据库中加载特定的键和值,如何使此HashMap对所有其他类可用,而不必在每次调用HashMap时重复加载这些值:

这是包含加载HashMap的方法的类:

代码语言:javascript
复制
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;         
    }
}
EN

回答 5

Stack Overflow用户

发布于 2013-04-02 21:09:27

您可以将地图保存在静态字段中,并在static块中对其进行初始化。这种方式只需要做一次:

代码语言:javascript
复制
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;
    }
}

然后,您可以使用以下命令检索代码:

代码语言:javascript
复制
Codes.fetchCodes();
票数 2
EN

Stack Overflow用户

发布于 2013-04-02 21:11:27

如果不能选择静态字段,您可以懒惰地进行初始化,如下所示:

代码语言:javascript
复制
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;
}

注意:这不是线程安全的,但可能需要一些额外的同步。

票数 1
EN

Stack Overflow用户

发布于 2013-04-02 21:06:22

可能只加载一次数据?从芭乐中使用memoization(我会):

代码语言:javascript
复制
  Suppliers.memoize(//Implementation of Supplier<T>)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15764847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档