Java中,使用static final修饰符来声明一个不可变的静态成员变量是一种常见做法,这种方法可以用于HashMap。static意味着变量属于类而不是任何特定的实例,而final表示一旦变量被初始化后,它的值就不可再被修改。初始化时必须手动添加所有元素。

1、 可以使用静态代码块初始化

import java.util.HashMap;
import java.util.Map;

public class Main {
   private static final Map<String, String> myMap;
    static
    {
        myMap = new HashMap<String, String>();
        myMap.put("a", "b");
        myMap.put("c", "d");
    }
  public static void main(String[] args) {
    System.out.println(Main.myMap);
    System.exit(0); //success
  }
}

2、 使用函数方法初始化

import java.util.HashMap;
import java.util.Map;

public class Main {
   private static final Map<String, String> myMap = createMap();
    private static Map<String, String> createMap()
    {
        Map<String,String> myMap = new HashMap<String,String>();
        myMap.put("a", "b");
        myMap.put("c", "d");
        return myMap;
    }
  public static void main(String[] args) {
    System.out.println(Main.myMap);
    System.exit(0); //success
  }
}

3、 Java 9中HashMap的初始化方法

import java.util.HashMap;
import java.util.Map;
import static java.util.Map.entry;

public class Main {
    private static final Map<String, String> test = Map.of("a", "b", "c", "d");
    private static final Map<String, String> test2 = Map.ofEntries(
        entry("a", "b"),
        entry("c", "d")
    );
  public static void main(String[] args) {
    System.out.println(Main.test);
    System.exit(0); //success
  }
}

test和test2的初始化是相同的,只是表达方式不一样。Map.of方法在Map中定义了最多十个元素,而该Map.ofEntries方法没有这样的限制。

推荐文档