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

案例描述

对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集合类可用于存储数量不等的对象,并可以实现常用的数据结构如栈,队列等,Java集合还可以用于保存具有映射关...
    小徐andorid阅读 1,980评论 0 13
  • 什么是Map 不同于List单列的线性结构,Map提供的是一种双列映射的存储集合,它能够提供一对一的数据处理...
    still_loving阅读 3,318评论 0 30
  • 蒙蒙是我正式开班的第一个学生,非常乖巧的小女孩。观察力特别的细腻,喜欢用画画来记录自己的生活,描绘她对生活...
    花苗苗原创童画馆阅读 859评论 0 0
  • 破上YY破ing
    莫123536阅读 200评论 0 0
  • 东方有田兮种东瓜此东瓜兮非彼冬瓜,东方属木兮东瓜乃木瓜木瓜入药兮麻木不仁不可治南方有田兮种南瓜南瓜嫩白多汁兮可以下...
    万象更新_f742阅读 619评论 1 2