我正在尝试将Map初始化为类中的零。我是这样做的:
public class A{
private final Map<String,Integer> myMap;
public A(){
this.myMap = new HashMap<String,Integer>() {
{
put("a",0);
put("b",0);
}
};
}
}
我的问题:这是一个很好的实施吗?这有什么不对吗?或者有更好的方法来实现这个吗?
答案 0 :(得分:2)
Rod_Algonquin的意思是:
public class A {
private final Map<String,Integer> myMap;
public A() {
this.myMap = new HashMap<String,Integer>();
this.myMap.put("a",0);
this.myMap.put("b",0);
}
}
跟进Luiggi Mendoza的评论,因为Map
被声明为final
,您可能认为地图不可修改,但final
做不保证。这将:
public class A {
private final Map<String,Integer> myMap;
public A() {
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("a",0);
map.put("b",0);
this.myMap = Collections.unmodifiableMap(map);
}
}
答案 1 :(得分:1)
更好的方法是在初始化地图后简单地输入值:
myMap = new HashMap<>();
myMap.put("a",0);
myMap.put("b",0);
您当前版本正在做的是它使用实例初始化程序块(a.k.a。double brace initialization),这会在后台创建一个不必要的匿名类。这样做没有任何实际好处。相反,它可能会导致一个小performance hit。
答案 2 :(得分:0)
如果您的真正目标是创建不可变Map
,我强烈建议您使用Guava的ImmutableMap.Builder