在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. javascript: with 表单验证

    <html> <head> <script type="text/javascript"> function validate_required ...

  2. 1.14 Python基础知识 - 文件操作

    应用程序往往需要从磁盘文件中读取数据,或者把数据存储到磁盘中文件里,以持久的保存数据.文件可以看作是数据的集合,文件的输入与输出通过流来实现.流有5种基本的操作:打开.读取.写入.改变当前位置和关闭. ...

  3. 原生js大总结七

    061.如何获取父级节点.上一个子级节点.下一个子级节点    nextElementSibling  后一个兄弟元素  (如果没有是null)    previousElementSibling   ...

  4. ajax的get请求与编码

    window.onload = function(){ document.getElementById('username').onblur = function(){ var name = docu ...

  5. WCF REST (二)

    今天主要写下  POST等其他方式 发送请求 以及 流方式 文件的上传与下载 一.Post 提交数据 先来想下 POST和Get 的不同   Get 方式 我们直接通过 url  来传递参数   先来 ...

  6. numpy 细节问题

    1. np.expand_dims >> X = np.random.randint(0, 9, (2, 3)) >> mean_X = np.mean(X, axis=0) ...

  7. volatile关键字深入理解

    前言: 这个关键字的重点就三个字,就是可见性.但是面试的时候,你说出可见性三个字,基本上满分100的话,最多只能得到20分.剩下的那80分,就要靠你用硬功夫去获得了. 所谓的硬功夫,其实就是要整明白, ...

  8. HDU 1996汉诺塔VI

    题目: n个盘子的汉诺塔问题的最少移动次数是2^n-1,即在移动过程中会产生2^n个系列.由于 发生错移产生的系列就增加了,这种错误是放错了柱子,并不会把大盘放到小盘上,即各柱 子从下往上的大小仍保持 ...

  9. [Angular] HostListener Method Arguments - Blocking Default Keyboard Behavior

    We are going to see how to using method arguments for @HostListener. First, we can use HostListener ...

  10. Vmware P2V 清除被隱藏網卡佔用的的IP

    修改註冊表也可以讓非正常卸載的網卡釋放捆綁的固定的IP地址,註冊表中定位於中:HKEY_LOCAL_MACHINE \SYSTEM\ CurrentControlSet\Services\Tcpip\ ...