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

2018-11-16  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读