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时间产生影响(正面)。否。它们不一样
为映射引用指定nullmap=null
清除映射的内容,但对象仍然存在,并且map.clear()
仍然引用它map
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()。最后一个是最好的,如果你不为内存非常有限的系统编码,那么它就是第一个最好的
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;
}