先把结论放出来我们在慢慢说道:
HashTable的key与value均不允许出现空值
HashMap的key与value是可以出现空值的
我们从源码分析HashTable
当value为空时,会抛出NUllPointerException()
而当key为空时,执行到int hash = key.hashCode();时候依旧会抛出 NullPointerException()的错误。
我们再看HashMap是如何处理的
可以看出当使用put方法时,会调用hash()计算hashcode值,可以看出当key == null 时 返回值为0
思考当使用HashMap时,会出现一些小问题,我们先看看当使用HashMap查询不存在数据的时候会返回什么。
public class MyHashMap {
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("aaa",null);
// System.out.println(map.get("aaa"));
System.out.println(map.get("bbb"));
}
}
测试结果:
对存空值的key查询返回为null,那么我们如何在应用中区分这两种情况?
其实也很简单,(第一次做小思考,所以做个笔记)做一个判空操作
String key = "被查询的key";
if(map.containsKey(key)){
System.out.println(map.get(key));
}else{
System.out.println(Not found!);
}