在 Java 的构造函数中初始化 Map 的更好方法
Better way to initialize Map in constructor in Java
我正在尝试将 class 中的 Map 初始化为零。我是这样做的:
public class A{
private final Map<String,Integer> myMap;
public A(){
this.myMap = new HashMap<String,Integer>() {
{
put("a",0);
put("b",0);
}
};
}
}
我的问题:这是一个很好的实现吗?这有什么问题吗?或者有没有更好的方法来实现这个?
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
确实 not 保证。这将:
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);
}
}
更好的方法是在初始化地图后简单地输入值:
myMap = new HashMap<>();
myMap.put("a",0);
myMap.put("b",0);
您当前的版本正在做的是它使用了实例初始化器块(a.k.a。double brace initialization), which creates an unnecessary anonymous class in the background. There is no real benefit in doing so here. On the contrary, it will likely cause a small performance hit。
如果您的真正目标是创建不可变的 Map
,我强烈建议您使用 Guava's ImmutableMap.Builder
我正在尝试将 class 中的 Map 初始化为零。我是这样做的:
public class A{
private final Map<String,Integer> myMap;
public A(){
this.myMap = new HashMap<String,Integer>() {
{
put("a",0);
put("b",0);
}
};
}
}
我的问题:这是一个很好的实现吗?这有什么问题吗?或者有没有更好的方法来实现这个?
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
确实 not 保证。这将:
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);
}
}
更好的方法是在初始化地图后简单地输入值:
myMap = new HashMap<>();
myMap.put("a",0);
myMap.put("b",0);
您当前的版本正在做的是它使用了实例初始化器块(a.k.a。double brace initialization), which creates an unnecessary anonymous class in the background. There is no real benefit in doing so here. On the contrary, it will likely cause a small performance hit。
如果您的真正目标是创建不可变的 Map
,我强烈建议您使用 Guava's ImmutableMap.Builder