美文网首页
Java中map.get(Object key)的疑问

Java中map.get(Object key)的疑问

作者: 晨钟初磬 | 来源:发表于2018-11-16 15:47 被阅读0次

    案例描述

    对Java中map的get方法有些模糊,下面的代码会返回value吗?

    HashMap<String,String> map = new HashMap<String,String>();
    String key1 = new String("key");
    System.out.println("key1.hashCode()="+key1.hashCode());
            
    String key2 = new String("key");
    System.out.println("key2.hashCode()="+key2.hashCode());
            
    System.out.println("key1==key2? "+(key1 == key2));
            
    map.put(key1,"value");
    System.out.println(map.get(key2));
    

    结果是肯定的。

    //output
    key1.hashCode()=106079
    key2.hashCode()=106079
    key1==key2? false
    value
    

    原因

    Map接口中的get()实现约定

    Map接口中get()文字约定

    假如map里有一个(k,v)映射,用key去查找

    key (k,v) 返回值
    null (null,v) v
    null (不为null,v) null
    不为null key.equals(k)为true v
    不为null key.equals(k)为false null

    查看HashMap的源码

    HashMap用key查找

    HashMap在用key查找value时,如果遇到下列情况,返回节点(里面包含value)
    1.key的引用值与map中key的引用值相等,返回该节点。
    2.key不为空,并且key equals (节点的key) ,返回该节点。

    其他关联知识

    value相同的不同实例String,hashCode是相等得。

    String的hashCode

    相关文章

      网友评论

          本文标题:Java中map.get(Object key)的疑问

          本文链接:https://www.haomeiwen.com/subject/rqymfqtx.html