静态 HashMap 初始化

Mar*_*les 3 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));
Run Code Online (Sandbox Code Playgroud)

小智 5

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

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

如果您已经在使用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>
    ...
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以使用 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);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  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
    }
    
    Run Code Online (Sandbox Code Playgroud)

假设稍后您想向映射添加一些常量,那么您也可以这样做。

Collections.unmodifyingMap:它有助于拥有不可修改的地图视图,该视图无法修改。因为如果对地图进行任何修改,它会给出不支持的异常。