HashMap的key可以为null吗?
这问题太基础了,回答是可以,但不得不说很久时间不回顾,我已经忘了!前一段时间遇到的时候我想当然地以为不可以,可见当做考试记的东西忘得真的太容易了。
HashTable不可以而HashMap可以,HashMap可以存一个key为null的元素,若多个则后来的会覆盖原有的值,并且value均可为空。下面研究一下源码!这样就能加深印象了!
1 | public V put(K key, V value) { |
emm,粗粗地看一眼没有对key作null的限制,这个Node就是普通的Node,也没有对key做什么限制,这个hash()方法里返回为0,所以表示key为null时不会报错,是可行哒,
1 | public V get(Object key) { |
并且get方法特别处理了值为null的情况
下面是HashTable:
1 | public synchronized V put(K key, V value) { |
先看到了value == null会抛空指针异常,下面取了key的hash值,如果此时key为null会有异常,因为他没有对null做特殊处理所以key为null的情况也是不允许的。
题外话看到下面做了个运算,这个& 0x7FFFFFFF,32-bit 十六进制,代表int的最大正整数,二进制是全1。
吼啦 本文完 万恶的周五 让人一点学习的心思都没有 赶紧回宿舍啦