黑马程序员技术交流社区

标题: HashMap中可以用get方法的返回值判断键是否存在吗 [打印本页]

作者: 黑马-许鹏    时间: 2013-5-12 20:59
标题: HashMap中可以用get方法的返回值判断键是否存在吗
本帖最后由 黑马-许鹏 于 2013-5-14 02:34 编辑

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

作者: 李征    时间: 2013-5-12 21:19
亲, 在这里Map集合下的Hashtable是不可以键入NULL键或NULL值的,但是Hashmap可以键入NULL键或NULL值,你说的get方法来判定一个键是否为NULL,是为了证明是否存在,是可以的,但前提是在Hashmap里面
作者: 钟林杰    时间: 2013-5-12 21:26
你理解错了,get方法是通过他的键获取他的值。方法在API文档的AbstractMap类中查看,方法如下get(Object key)
          返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
作者: ZhaoYuBetter    时间: 2013-5-12 21:42
这是 hashmap 的特性,key 必须存在,且唯一,对应的 value 可以为空
作者: 赵崇友    时间: 2013-5-12 22:34
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. }
复制代码

作者: zms2100    时间: 2013-5-12 22:54
都没错,这是当然这是建立正常情况下的,才能作为判断是否存在的关键;
Hashtable是比较早的Map集合中的,它就不支持null键、null值,但它是会抛异常(当指定键为null时);
而HashMap是JDK1.2才出现的,为了提高安全性,HashMap也就允许了键值可以为null,同时效率又比较快,也就把Hashtable替代掉了。
当然LZ说的是有道理的,而老师讲的是建立在正常开发使用的情况下,
1、当你在put过程没有出现添加null值的情况下,那么你的判断肯定不会有误;
2、通常来讲,判断是否存在该键是为了修改值等,当值为null时(不管是真存在还是值为null),那么就直接put进去覆盖原有的键值(还是建立在实际情况基础上,null为空通常都是没什么意义的);
【个人观点,仅供参考,O(∩_∩)O~】
作者: 刘胜寒    时间: 2013-5-13 08:58
get(Object key)
          返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null。

多看看那API文档
作者: zms2100    时间: 2013-5-13 10:28
刘胜寒 发表于 2013-5-13 08:58
get(Object key)
          返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回  ...

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

知我者zms2100也,结贴。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2