A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黑马-许鹏 于 2013-5-14 02:34 编辑

     各位高手,小弟正在看毕向东java基础培训课程。正看到16天-03,HashMap这一节。毕老师说:可以通过get方法的返回值来判断一个键是否存在。但是他前面举了个例子,用put方法可以放一个值为null的键,map.put("04",null),那用get方法取这个值返回值为null,但是它的键值存在啊,是“04”。弱弱的问一句,是不是毕老师讲错了,还是我的理解有误。谢谢!

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

11 个回复

倒序浏览
亲, 在这里Map集合下的Hashtable是不可以键入NULL键或NULL值的,但是Hashmap可以键入NULL键或NULL值,你说的get方法来判定一个键是否为NULL,是为了证明是否存在,是可以的,但前提是在Hashmap里面
回复 使用道具 举报
钟林杰 来自手机 中级黑马 2013-5-12 21:26:50
藤椅
你理解错了,get方法是通过他的键获取他的值。方法在API文档的AbstractMap类中查看,方法如下get(Object key)
          返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。来自: Android客户端
回复 使用道具 举报
这是 hashmap 的特性,key 必须存在,且唯一,对应的 value 可以为空
回复 使用道具 举报
HashMap 基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
看下面的代码:运行结果为:hm:null
通过null键获得值为null;
  1. package cn.test;

  2. import java.util.HashMap;

  3. public class HashMapTest {
  4.         public static void main(String []args){
  5.                 HashMap<String, String> hm=new HashMap<String,String>();
  6.                 hm.put(null, null);
  7.                 System.out.println("hm:"+hm.get(null));
  8.         }
  9.        
  10. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
刘胜寒 + 1

查看全部评分

回复 使用道具 举报
都没错,这是当然这是建立正常情况下的,才能作为判断是否存在的关键;
Hashtable是比较早的Map集合中的,它就不支持null键、null值,但它是会抛异常(当指定键为null时);
而HashMap是JDK1.2才出现的,为了提高安全性,HashMap也就允许了键值可以为null,同时效率又比较快,也就把Hashtable替代掉了。
当然LZ说的是有道理的,而老师讲的是建立在正常开发使用的情况下,
1、当你在put过程没有出现添加null值的情况下,那么你的判断肯定不会有误;
2、通常来讲,判断是否存在该键是为了修改值等,当值为null时(不管是真存在还是值为null),那么就直接put进去覆盖原有的键值(还是建立在实际情况基础上,null为空通常都是没什么意义的);
【个人观点,仅供参考,O(∩_∩)O~】

评分

参与人数 1技术分 +1 收起 理由
刘胜寒 + 1

查看全部评分

回复 使用道具 举报
get(Object key)
          返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null。

多看看那API文档
回复 使用道具 举报
刘胜寒 发表于 2013-5-13 08:58
get(Object key)
          返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回  ...

其实LZ挺精明的了,因为HashMap是允许null键null值的嘛,
所以他的疑惑是当HashMap集合中存在("04",null)时,返回的也是null,跟没有“04”这个键是一样结果,
所以他疑惑通过get(key)来判断是否存在某个键是有误或者说是不准确的。
回复 使用道具 举报
楼主注意结贴。。。。。
回复 使用道具 举报
藤椅正解 我觉得  因为 这位同学问题中没有put(null,null)即定义的hashmap集合中没有null键和其对应的值。所以 get(null)返回的是null
回复 使用道具 举报
zms2100 发表于 2013-5-13 10:28
其实LZ挺精明的了,因为HashMap是允许null键null值的嘛,
所以他的疑惑是当HashMap集合中存在("04",null) ...

知我者zms2100也,结贴。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马