Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方法map=null和map.clear()是否相同?_Java_Class_Dictionary_Null - Fatal编程技术网

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

Java 方法map=null和map.clear()是否相同?,java,class,dictionary,null,Java,Class,Dictionary,Null,代码: 或 } 或者更好 void methodFillMap(){ myMap=null; myMap.put(.....); ..................... void methodFillMap(){ myMap=newhashmap(); myMap.put(…); ..................... } void methodFillMap(){ myMap=null; myMap.put(…) 只会抛出一个NullPointerException 要清除映射,

代码:

} 或者更好

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

 .....................
void methodFillMap(){
myMap=newhashmap();
myMap.put(…);
.....................
}
void methodFillMap(){ myMap=null; myMap.put(…)

只会抛出一个NullPointerException

要清除映射,应使用myMap.clear()

顺便说一下,重新实例化地图和使用clear有两个区别:

-clear不会调整映射的大小。如果HashMap包含n个bucket,则在执行clear后,它仍将包含n个空bucket,这会对性能产生影响(正面或负面,取决于您对映射的使用情况)


-如果使用clear,则不会丢弃对象,因此不会通过下一次GC对其进行管理,如果这种情况经常发生,则会对GC时间产生影响(正面)。

否。它们不一样

  • map=null
    为映射引用指定null
  • map.clear()
    清除映射的内容,但对象仍然存在,并且
    map
    仍然引用它

将映射设置为null后,将任何内容放入其中将导致
NullPointerException
结果不同,因为map=nul不会使映射项为null。map=null仅使对映射的引用为null。 请参见下面JDK 7的clear实现:

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

  .....................
}
public void clear(){
modCount++;
条目[]选项卡=表格;
对于(int i=0;i

我会使用map.clear()。

最后一个是最好的,如果你不为内存非常有限的系统编码,那么它就是第一个最好的

  • 在第一种情况下,您必须清除hashtabel,which需要一些计算
  • secound甚至无法工作,因为您只得到了一个空引用,而不是一个hashmap
  • 在第三种情况下,您只需扔掉旧的hashmap,让垃圾收集器处理旧的hashmap

  • 1和3之间有一个很大的区别。如果其他任何东西都有对映射的活动引用(通过反射或引用映射的另一个局部变量),那么只要其他引用存在,您的项就会保留在内存中;更糟糕的是,您有两个具有单独实体的映射。通常
    map.Clear()除非运行clear notability的时间减慢了应用程序的速度,否则应使用
    void methodFillMap(){
    myMap=null;
    myMap.put(.....);
    
     .....................
    
    void methodFillMap(){
      myMap=new HashMap<Integer, String>();
      myMap.put(.....);
    
      .....................
    }
    
        public void clear() {
            modCount++;
            Entry[] tab = table;
            for (int i = 0; i < tab.length; i++)
                tab[i] = null;
            size = 0;
        }