javamap初始化并赋值
第⼀种⽅式:static 块
public class MapTest {
private static final Map<String, String> myMap = new HashMap<String, String>();
static {
myMap.put("张三", "北京");
myMap.put("李四", "上海");
}
}
最常规的初始化⽅式。
第⼆种⽅式:双括号初始化(匿名内部类)
public class MapTest {
HashMap<String, String> myMap = new HashMap<String, String>() {{
put("张三", "北京");
put("李四", "上海");
}};
}
java8新特性,双括号初始化。
相⽐于第⼀种⽅式,减少了⼀些代码,看着舒服了不少。
第⼀层括弧实际是定义了⼀个匿名内部类 ,第⼆层括弧实际上是⼀个实例初始化块,这个块在内部匿名类构造时被执⾏。
因为这种⽅式是匿名内部类的声明⽅式,所以引⽤中持有着外部类的引⽤。所以当串⾏化这个集合时,外部类也会被不知不觉的串⾏化,⽽当外部类没有实现Serialize接⼝时,就会报错。其⼆,在上
⾯的例⼦中,其实是声明了⼀个继承⾃HashMap的⼦类,然⽽有些串⾏化⽅法,例如要通过Gson串⾏化为json,或者要串⾏化为xml时,类库中提供的⽅式,是⽆法串⾏化Hashset或者HashMap的⼦类的,也就导致了串⾏化失败。解决办法是重新初始化为⼀个HashMap对象【new HashMap(map);】,这样就可以正常进⾏初始化了。
另外要注意的是,这种使⽤双括号进⾏初始化的语法在执⾏效率上要⽐普通的初始化写法要稍低。
第三种⽅式:guava
public class MapTest {
Map<String, String> myMapA = ImmutableMap.of("张三", "北京", "李四", "上海");
// 或者
Map<String, String> myMapB = ImmutableMap.<String, String>builder()
.put("张三", "北京")
.put("李四", "上海")
.
build();
java xml是什么}
使⽤Guava需要引⼊guava依赖:
<dependency>
<groupId&le.guava</groupId>
<artifactId>guava</artifactId>
<version>28.1-jre</version>
</dependency>
需要注意的是,ImmutableMap是不可变Map,也就是说初始化之后,不能再往⾥⾯put元素了,不然会报异常java.lang.UnsupportedOperationException。
查看ImmutableMap源码也可以发现,调⽤put⽅法时,直接抛异常:
@Deprecated
@CanIgnoreReturnValue
public final V put(K k, V v) {
throw new UnsupportedOperationException();
}
不过,实际开发中,我们⽤到ImmutableMap的场景都是定义系统所需的⼀些常量,因此,ImmutableMap很有⽤。第四种⽅式:对于Java 9或更⾼版本
// 最多存储10个元素
Map<String, String> test1 = Map.of(
"a", "b",
"c", "d"
);
// 没有限制
Map<String, String> test2 = Map.ofEntries(
entry("a", "b"),
entry("c", "d")
);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论