在Java中,Map里面的键和值可以为空吗?我们先来看一个例子:

private static void TestHashMap() {
// TODO Auto-generated method stub
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(0, "0");
map.put(1, null);
map.put(null, "2");
map.put(3, "");
map.put(null, "4"); for (Integer key : map.keySet()) {
System.out.println("Key-->" + key + " Value-->" + map.get(key));
}
}

输出结果:

Key–>null Value–>4

Key–>0 Value–>0

Key–>1 Value–>null

Key–>3 Value–>

由此看来,对于我们平时使用较多的HashMap来说,键和值是可以为null的,map.put(null, “4”)还会覆盖map.put(null, “2”)这个操作。

我们是否可以由此得出Map里面的键和值是否一定可以为null呢?并不一定,再来看一个例子:

private static void TestHashTable() {
// TODO Auto-generated method stub
Map<Integer, String> map = new Hashtable<Integer, String>();
map.put(0, "0");
map.put(1, null);
map.put(null, "2");
map.put(3, "");
map.put(null, "4"); for (Integer key : map.keySet()) {
System.out.println("Key-->" + key + " Value-->" + map.get(key));
}
}

运行之后,会出现“NullPointerException”异常。

查看Java Api,可以看到:

所以,对于Map里面的键和值是否可以为空的问题,答案是:不一定。对于HashMap来说,可以存放null键和null值,而HashTable则不可以。

对于HashMap和HashTable的区别,可以参考:

https://my.oschina.net/u/1458864/blog/267591

更多思考:

对于第一个例子,我们会发现一个问题:打印HashMap的键和值的时候,输出结果并不是按照我们的插入顺序输出的。很多时候我们希望怎么放进去,就怎么拿出来,这种顺序对于显示或者处理很重要。查看Api后,发现ListOrderedMap和LinkedHashMap可以满足我们的要求,感兴趣的同学可以自己试一下。

Java: Map里面的键和值可以为空吗?的更多相关文章

  1. Map接口中的常用方法和Map集合遍历键找值方式

    Map接口中定义了很多方法,常用的如下: public V put(K key,V value) 将指定的值与此映射中的指定键相关联(可选操作) V remove(Object key); 如果此映射 ...

  2. 160725、Java Map按键排序和按值排序

    按键排序(sort by key) jdk内置的Java.util包下的TreeMap<K,V>既可满足此类需求,原理很简单,其重载的构造器之一 有一个参数,该参数接受一个比较器,比较器定 ...

  3. java中判断对象中属性值是否为空的函数

    public boolean checkObjFieldIsNull(Object obj) throws IllegalAccessException { boolean flag = false; ...

  4. Java Map知识点

    1.遍历 java遍历Map的方式有多种,一下以代码示例来说明使用: Map<String, String> tmap = new HashMap<String, String> ...

  5. Java Map 接口

    Map接口中键和值一一映射. 可以通过键来获取值. 给定一个键和一个值,你可以将该值存储在一个Map对象. 之后,你可以通过键来访问对应的值. 当访问的值不存在的时候,方法就会抛出一个NoSuchEl ...

  6. java Map的四种遍历方式

    1.这是最常见的并且在大多数情况下也是最可取的遍历方式,在键值都需要时使用. Map<Integer, Integer> map = new HashMap<Integer, Int ...

  7. java://Comparator、Comparable的用法(按照要求将map集合的键值对进行顺序输出)

    import java.util.*; public class Person implements Comparable<Person>//使Person的属性具有比较性 { priva ...

  8. Android(java)学习笔记105:Map集合的遍历之键值对对象找键和值

    package cn.itcast_01; import java.util.HashMap; import java.util.Map; import java.util.Set; /* * Map ...

  9. Android(java)学习笔记104:Map集合的遍历之键找值

    package cn.itcast_01; import java.util.HashMap; import java.util.Map; import java.util.Set; /* * Map ...

随机推荐

  1. ospp.vbs是什么文件?激活过程cscript ospp.vbs命令详解

    ospp.vbs是什么文件?激活过程cscript ospp.vbs命令详解 在Office 2013激活过程中我们经常会用到cscript ospp.vbs这个命令.那么,很有必要来了解一下,osp ...

  2. Docker---(7)Docker安装启动RabbitMQ

    原文:Docker---(7)Docker安装启动RabbitMQ 版权声明:欢迎转载,请标明出处,如有问题,欢迎指正!谢谢!微信:w1186355422 https://blog.csdn.net/ ...

  3. iOS_02_第一个C语言程序(理解编译、连接、运行)

    一.开发工具的选择 1. 可以用来写代码的工具:记事本.ULtraEdit.Vim.Xcode等. 2. 选择XCode的原因:苹果公司官方提供的开发利器.简化开发的工程.有高亮显示功能. 3. 使用 ...

  4. 最新GitHub账号注册(详细图解)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 一.简介 GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub. ...

  5. ZJOI2002昂贵的聘礼题解

    http://codevs.cn/problem/1324/ 题目大意 一个部落,你能够和社会地位等级的极差不大于M的全部人交易.你能够拿金币直接从一个人手里买东西,也能够从别人那里买到那个人想要的东 ...

  6. 异步载入JS

      平时最常使用的就是这样的同步载入形式:    <script src="http://yourdomain.com/script.js"></script&g ...

  7. 缓存(cache)的理解

    缓存的特点: 读取速度很快,容量相比硬盘较小: 缓存在实现时,本质上仍然是一块内存区域: cache 机制的一个核心关注点还在于,究竟什么样的数据应该放在缓存中,显然不是所有,那就应当是部分,就应该是 ...

  8. how to query for a list<String> in jdbctemplate?--转载

    原文地址:http://stackoverflow.com/questions/13354158/how-to-query-for-a-liststring-in-jdbctemplate   I'm ...

  9. ZOJ 2679 Old Bill ||ZOJ 2952 Find All M^N Please 两题水题

    2679:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1679 2952:http://acm.zju.edu.cn/onli ...

  10. 账号被盗!请勿在CSDN,回复不论什么消息。

    账号被盗!请勿在CSDN,回复不论什么消息.