关于TreeMap集合存取null键null值问题详解
2016-09-18 21:42
357 查看
这几天用到TreeMap集合 ,发现好多基础知识都忘的差不多了,写下来备用。
问题描述:我们都知道 HashMap是可以存储null值null键的。那么TreeMap可以么?
首先我们看是否可以存储null值,代码如下:
这样运行结果是没有问题的。可以正常输出null
那么null键呢?修改代码如此下:
Exception in thread “main” java.lang.NullPointerException
这样的话 ts.put(null, 3); 这一行程序报了空指针异常。
首先明确String类是实现了Comparable接口的。因此TreeMap无需我们传入比较器。这里报了空指针是因为存入数据的时候,put方法调用了String类的compareTo方法,而这时候,其为null,调用其compareTo方法会发生空指针异常。
那么,在明白了put方法底层之后,我们可以传入比较器,以实现强制其存储null键。代码如下:
在TreeMap中传入比较器,put方法优先调用比较器,因而在s1 == null时强制其返回1,即可实现存储null键。但这时并不能使用get(键)的方法去获取值,原因参见我的上一篇http://blog.csdn.net/tracybug/article/details/52515580
仅能通过如下方式去遍历获取键值对
输出结果:
二=2
一=1
null=3
以上实现强制存储null键。
问题描述:我们都知道 HashMap是可以存储null值null键的。那么TreeMap可以么?
首先我们看是否可以存储null值,代码如下:
TreeMap<String, Integer> ts = new TreeMap<>(); ts.put("一", 1); ts.put("三", null); System.out.println(ts.get("三"));
这样运行结果是没有问题的。可以正常输出null
那么null键呢?修改代码如此下:
TreeMap<String, Integer> ts = new TreeMap<>(); ts.put("一", 1); ts.put("二", 2); ts.put(null, 3); System.out.println(ts.get(null));
Exception in thread “main” java.lang.NullPointerException
这样的话 ts.put(null, 3); 这一行程序报了空指针异常。
首先明确String类是实现了Comparable接口的。因此TreeMap无需我们传入比较器。这里报了空指针是因为存入数据的时候,put方法调用了String类的compareTo方法,而这时候,其为null,调用其compareTo方法会发生空指针异常。
那么,在明白了put方法底层之后,我们可以传入比较器,以实现强制其存储null键。代码如下:
TreeMap<String, Integer> ts = new TreeMap<>(new Comparator<String>() { public int compare(String s1, String s2) { // 这里明确s1是要拿进来存的数据 s2是已经存进来的数据 if (s1 == null){ return 1; } else { return s2.charAt(0) - s1.charAt(0); } } }); ts.put("一", 1); ts.put("二", 2); ts.put(null, 3);
在TreeMap中传入比较器,put方法优先调用比较器,因而在s1 == null时强制其返回1,即可实现存储null键。但这时并不能使用get(键)的方法去获取值,原因参见我的上一篇http://blog.csdn.net/tracybug/article/details/52515580
仅能通过如下方式去遍历获取键值对
Set<Map.Entry<String, Integer>> s = ts.entrySet(); for (Map.Entry<String, Integer> entry : s) { System.out.println(entry); }
输出结果:
二=2
一=1
null=3
以上实现强制存储null键。
相关文章推荐
- 关于集合的再补充,Set集合的唯一性,与集合的null值null键问题
- C#z中关于存取数据库NULL和0的问题
- 关于list集合存储null的问题
- 关于TreeMap、HashMap、HashTable的键是否能为""和Null的问题
- 关于c#代码Convert.ToChar(null);出现异常,而object obj = null; Convert.ToChar(obj);//返回'\0'空字符问题详解
- 关于TreeMap、HashMap、HashTable的键是否能为\"\"和Null的问题
- C#关于继承后,添加泛型集合中后,再次遍历的问题 !!!
- 关于SSIS从Excel导入数据出现问题,字母加数字,变为NULL
- 关于并发用户与集合点的问题
- SQL SERVER中关于NULL应注意的问题
- 关于Hibernate中fatch=eager的bag集合(一个java List)使用Criteria查询出现重复记录的问题
- 关于集合的性能问题
- LINQ学习中关于null相关的问题及解决方案
- CSD详解及关于手机上网收费的问题
- Windows7下关于IIS配置问题详解
- 关于IList不能用作集合的问题
- UserControl 中包含封装了集合对象的属性被设计器自动初始化所引起的错误!也有关于List的问题
- 关于UCOS学习OSMboxCreate(NULL)的问题,希望遇到同样问题的人得到合理的解答
- 关于“System.NullReferenceException: 未将对象引用设置到对象的实例”问题原因。
- 关于jsp中存取图片的问题