目录标题
可变
new HashMap<>()
# mutable(可变)
private static final Map<String, String> myMap = new HashMap<>();
static {
myMap.put("key1", "value1");
myMap.put("key2", "value2");
}
// {key1=value1, key2=value2}
myMap.put("key3", "value3"); // {key1=value1, key2=value2, key3=value3}
[Ref] 为什么 final修饰的String不可变,final修饰的map就可变呢?
java8新特性-双括号初始化
# mutable(可变)
# java8新特性-双括号初始化
private static final HashMap<String, String> myMap1 = new HashMap<>() {{
put("key1", "value1");
put("key2", "value2");
}};
// {key1=value1, key2=value2}
myMap1.put("key3", "value3"); // {key1=value1, key2=value2, key3=value3}
不可变
Collections.unmodifiableMap(new HashMap<>()
# immutable(不可变)
# Collections工具方法
Map<String, String> immutableMap = Collections.unmodifiableMap(new HashMap<>() {{
put("key1", "value1");
put("key2", "value2");
}});
// {key1=value1, key2=value2}
immutableMap.put("key3", "value3"); // java.lang.UnsupportedOperationException
java9新特性-最简便的方式 Map.of
# immutable(不可变)
# java9新特性-最简便的方式
private static final Map<String, String> myMap2 = Map.of("kye1", "value1", "key2", "value2");
// {kye1=value1, key2=value2}
myMap2.put("key3", "value3"); // java.lang.UnsupportedOperationException
ImmutableMap.of
# immutable(不可变)
# com.google.guava提供的方法
Map<String, String> map4 = ImmutableMap.of("kye1", "value1", "key2", "value2");
// {kye1=value1, key2=value2}
map4.put("key3", "value3"); // java.lang.UnsupportedOperationException
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1.1-jre</version>
</dependency>
ImmutableMap.<String, String>builder().put
# immutable(不可变)
# com.google.guava提供的方法
Map<String, String> map5 = ImmutableMap.<String, String>builder().put("kye1", "value1").put("key2", "value2").build();
// {kye1=value1, key2=value2}
map5.put("key3", "value3"); // java.lang.UnsupportedOperationException
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1.1-jre</version>
</dependency>