代码:
public class MyClass {
private Map<Integer,String> myMap=new HashMap<Integer, String>();
...........................
void methodFillMap(){
myMap.put(.....);
.....................
}
}
什么是正确的:
void methodFillMap(){
myMap.clear();
myMap.put(.....);
.....................
}
或
void methodFillMap(){
myMap=null;
myMap.put(.....);
.....................
} 或者更好
void methodFillMap(){
myMap=new HashMap<Integer, String>();
myMap.put(.....);
.....................
}
答案 0 :(得分:8)
NO。他们不一样。
map = null
为地图参考指定null。map.clear()
清除地图内容,但该对象仍然存在且map
仍然引用它。答案 1 :(得分:7)
void methodFillMap(){ MYMAP = NULL; myMap.put(.....);
只会抛出一个NullPointerException。
要清除地图,您应该使用myMap.clear()。
顺便说一下,重新映射地图和使用clear之间存在两个区别:
-clear不会调整地图大小。如果HashMap包含n个桶,则在清除之后它仍将包含n个空桶,其性能结果(正或负取决于您对地图的使用情况)
- 如果您使用clear,则不会丢弃该对象,因此如果发生这种情况,它将不会通过下一个GC进行管理,对GC时间产生影响(正面)。
答案 2 :(得分:3)
最后一个是最好的一个,如果你不编码一个非常有限的memmory系统那么它是第一个最好的
答案 3 :(得分:2)
将地图设置为null后,将任何内容放入其中将导致NullPointerException
。
答案 4 :(得分:2)
不一样,因为map = nul不会使地图条目变得无效。 map = null仅使对地图的引用无效。 请参阅下面JDK 7中的明确实现:
public void clear() {
modCount++;
Entry[] tab = table;
for (int i = 0; i < tab.length; i++)
tab[i] = null;
size = 0;
}
我会使用map.clear()。