Map的实现类HashMap,HashTable,TreeMap,ConcurrentHashMap的Key和Value到底能不能放null?
HashMap,HashTable,TreeMap,ConcurrentHashMap这几个Map总是记不住key,value能不能存null。
今天就拿代码说话,talk is cheap,show me your code
先下结论
KEY | VALUE | |
---|---|---|
HashMap | 可以 | 可以 |
HashTable | 不可以 | 不可以 |
TreeMap | 不可以 | 可以 |
ConcurrentHashMap | 不可以 | 不可以 |
代码时刻
@Slf4j
public class NullDemo {
public static String NULL = null;
public static String NOTNULL = "";
public static void main(String[] args) {
Map<String, String> map = new ConcurrentHashMap<>();
testPut(map);
map = new HashMap<>();
testPut(map);
map = new Hashtable<>();
testPut(map);
map = new TreeMap<>();
testPut(map);
}
public static void testPut(Map<String, String> map) {
try {
map.put(NULL, NOTNULL);
log.info("{} key 能是null", map.getClass().getSimpleName());
} catch (Exception e) {
log.info("{} key 不能是null", map.getClass().getSimpleName());
}
try {
map.put(NOTNULL, NULL);
log.info("{} value 能是null", map.getClass().getSimpleName());
} catch (Exception e) {
log.info("{} value 不能是null", map.getClass().getSimpleName());
}
}
}
[main] INFO NullDemo - ConcurrentHashMap key 不能是null
[main] INFO NullDemo - ConcurrentHashMap value 不能是null
[main] INFO NullDemo - HashMap key 能是null
[main] INFO NullDemo - HashMap value 能是null
[main] INFO NullDemo - Hashtable key 不能是null
[main] INFO NullDemo - Hashtable value 不能是null
[main] INFO NullDemo - TreeMap key 不能是null
[main] INFO NullDemo - TreeMap value 能是null