静态HashMap初始化

时间:2016-03-03 03:47:48

标签: java spring hashmap

我有这门课,我想知道:
1°这是定义静态HashMasp的最佳方法 2°这是在基于Spring的应用程序中执行此操作的最佳方式吗?(Spring提供了更好的方法吗?)

提前致谢!

    public class MyHashMap {
        private static final Map<Integer, String> myMap;
        static {
            Map<CustomEnum, String> aMap = new HashMap<CustomEnum, String>();
            aMap.put(CustomEnum.UN, "one");
            aMap.put(CustomEnum.DEUX, "two");
            myMap = Collections.unmodifiableMap(aMap);
        }

        public static String getValue(CustomEnum id){
            return myMap.get(id);
        }
    }


    System.out.println(MyHashMap.getValue(CustomEnum.UN));

2 个答案:

答案 0 :(得分:2)

有几种方法可以做到这一点。例如,如果您的地图是不可变的,您可以考虑使用Google Guava libraries 它有一个ImmutableMap类,可以用来构建你的地图: -

static final ImmutableMap<String, Integer> WORD_TO_INT =
       new ImmutableMap.Builder<String, Integer>()
           .put("one", 1)
           .put("two", 2)
           .put("three", 3)
           .build();

如果您已经在使用Spring Framework并使用XML连接bean,那么您可以通过XML直接填充地图: -

    ...    
<!-- creates a java.util.Map instance with the supplied key-value pairs -->
<util:map id="emails">
    <entry key="pechorin" value="pechorin@hero.org"/>
    <entry key="raskolnikov" value="raskolnikov@slums.org"/>
    <entry key="stavrogin" value="stavrogin@gov.org"/>
    <entry key="porfiry" value="porfiry@gov.org"/>
</util:map>
    ...

答案 1 :(得分:1)

要么你可以使用Guava库。但是如果你不想使用第三方库,那么有两种方法可以做到:

  1. 静态初始化程序

    private static final Map<String,String> myMap = new HashMap<String, String>();
    static {
         myMap.put(key1, value1);
         myMap.put(key2, value2);
    }
    
    public static Map getMap() {
         return Collections.unmodifiableMap(myMap);
    }
    
  2. 实例初始化(匿名子类)。

    private static final Map<String,String> myMap = new HashMap<String, String>()
    {
       {
         put(key1, value1);
         put(key2, value2);
       }
    };
    
    public static Map getMap() {
         return Collections.unmodifiableMap(myMap);
    }
    
    private static void addPair(String key, String val){
         // Add key val to map
    }
    
  3. 假设您稍后要添加一些常量来映射,那么您也可以这样做。

    Collections.unmodifiableMap :有一个不可修改的地图视图,无法修改。因为它给出了不支持的异常,如果对map进行了任何修改。