方法map = null和map.clear()是否相同?

时间:2012-03-07 08:19:38

标签: java class map null clear

代码:

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(.....);

  .....................
}

5 个答案:

答案 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系统那么它是第一个最好的

  1. 在第一种情况下,你必须清除hashtabel whitch需要一些计算。
  2. 由于你只有一个空引用而不是一个hashmap,所以secound甚至不会工作。
  3. 在第三种情况下,您只需丢弃旧的hashmap,让垃圾收集器处理旧的hashmap。

答案 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()。