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

use*_*818 2 java null class map clear

码:

public class MyClass {
 private Map<Integer,String> myMap=new HashMap<Integer, String>();
 ...........................


void methodFillMap(){
   myMap.put(.....);

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

}
Run Code Online (Sandbox Code Playgroud)

什么是正确的:

 void methodFillMap(){
 myMap.clear();
 myMap.put(.....);

 .....................
 }
Run Code Online (Sandbox Code Playgroud)

要么

void methodFillMap(){
myMap=null;
myMap.put(.....);

 .....................
Run Code Online (Sandbox Code Playgroud)

} 或更好

void methodFillMap(){
  myMap=new HashMap<Integer, String>();
  myMap.put(.....);

  .....................
}
Run Code Online (Sandbox Code Playgroud)

MBy*_*ByD 8

没有.他们不一样.

  • map = null 将null赋给Map引用.
  • map.clear()清除地图的内容,但该对象仍然存在并map仍然引用它.


fpa*_*ici 7

void methodFillMap(){myMap = null; myMap.put(.....);

将简单地抛出NullPointerException.

要清除地图,您应该使用myMap.clear().

顺便说一下,重新映射地图和使用clear之间有两点不同:

-clear不会调整地图的大小.如果HashMap包含n个桶,则在清除之后它仍将包含n个空桶,并且会产生性能影响(正面或负面,具体取决于您对地图的使用情况)

- 如果您使用clear,则不会丢弃该对象,因此如果发生这种情况,它将无法通过下一个GC进行管理,对GC时间产生影响(正面).