浅谈HashMap、HashTable的key和value是否可为null

作者:qingmengwuhen1 时间:2022-03-12 19:57:47 

结论:

HashMap对象的key、value值均可为null。

HahTable对象的key、value值均不可为null。

且两者的的key值均不能重复,若添加key相同的键值对,后面的value会自动覆盖前面的value,但不会报错。


public class Test {

public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();//HashMap对象
Map<String, String> tableMap = new Hashtable<String, String>();//HashTable对象

map.put(null, null);
System.out.println("hashMap的[key]和[value]均可以为null:" + map.get(null));

try {
tableMap.put(null, "3");
System.out.println(tableMap.get(null));
} catch (Exception e) {
System.out.println("【ERROR】:hashTable的[key]不能为null");
}

try {
tableMap.put("3", null);
System.out.println(tableMap.get("3"));
} catch (Exception e) {
System.out.println("【ERROR】:hashTable的[value]不能为null");
}
}
}

运行结果:

hashMap的[key]和[value]均可以为null:null

【ERROR】:hashTable的[key]不能为null

【ERROR】:hashTable的[value]不能为null

补充知识:hashmap判断是否存在key时,使用get(key)==null判断还是containsKey?

java中hashmap(key,value)的key和value都可以是null

我们看hashmap中get()和containskey()的方法:

public V get(Object key) {

Node

结论

如果java程序对 key不存在和key存在但是存的值是null这两种情况处理相同一视同仁,则可以直接使用


T t = map.get(key);
if(t==null){
//key不存在,或者存的值是null
}else{
//key存在
}

代替:


if(map.containskey(key)){
//key 存在
}else{
//不存在
}
T t = map.get(key);
if(t==null){
//存的值是null
}

如果java程序需要区分存的值是null和key不存在这两种情况,则需要使用:


if(map.containskey(key)){
//key 存在
}else{
//不存在
}
T t = map.get(key);
if(t==null){
//存的值是null
}

来源:https://blog.csdn.net/qingmengwuhen1/article/details/70060838

标签:HashMap,HashTable,key,value,null
0
投稿

猜你喜欢

  • JVM 运行时数据区与JMM 内存模型

    2022-08-12 10:49:27
  • C#获取进程和对进程的操作

    2021-07-14 19:50:35
  • Java Calendar类使用案例详解

    2023-07-09 14:03:22
  • 浅谈xml配置spring profiles的几个注意点

    2022-07-20 15:20:09
  • 简单了解JAVA public class与class区别

    2023-11-15 23:59:26
  • C#根据年月日计算星期几的函数

    2022-03-17 04:50:50
  • Java数据结构之线索化二叉树的实现

    2022-03-16 15:25:34
  • Java实现二分搜索树的示例代码

    2023-08-05 10:43:40
  • Java 数组元素倒序的三种方式(小结)

    2022-04-01 22:59:19
  • 一篇文章带你入门Java Script

    2023-09-12 06:09:24
  • springboot集成opencv实现人脸识别功能的详细步骤

    2023-10-07 00:38:22
  • Java HtmlParse提取标签中的值操作

    2021-10-07 04:43:10
  • SpringBoot MongoDB与MongoDB GridFS基本使用

    2023-07-31 06:26:47
  • PowerShell 定时执行.Net(C#)程序的方法

    2023-07-09 14:10:39
  • C#实现无损压缩图片的示例详解

    2023-04-29 21:07:26
  • C#实现让窗体永远在窗体最前面显示的实例

    2022-09-25 21:40:17
  • 详解java封装实现Excel建表读写操作

    2023-12-24 11:17:20
  • C#中除去所有在HTML元素中标记

    2023-04-14 04:09:56
  • java+opencv实现人脸识别功能

    2023-02-20 21:52:58
  • C#对文件名智能排序的算法

    2022-05-02 16:18:28
  • asp之家 软件编程 m.aspxhome.com