HashTable 和 HashMap 的 空值问题

先把结论放出来我们在慢慢说道:

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!);
}
java
65 views
Comments
登录后评论
Sign In