案例描述
對(duì)Java中map的get
方法有些模糊拾并,下面的代碼會(huì)返回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));
結(jié)果是肯定的。
//output
key1.hashCode()=106079
key2.hashCode()=106079
key1==key2? false
value
原因
Map
接口中的get()
實(shí)現(xiàn)約定
Map接口中g(shù)et()文字約定
假如map
里有一個(gè)(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
時(shí)易猫,如果遇到下列情況,返回節(jié)點(diǎn)(里面包含value
)
1.key
的引用值與map中key的引用值相等,返回該節(jié)點(diǎn)具壮。
2.key
不為空准颓,并且key equals (節(jié)點(diǎn)的key)
,返回該節(jié)點(diǎn)。
其他關(guān)聯(lián)知識(shí)
value相同的不同實(shí)例String嘴办,hashCode是相等得瞬场。
String的hashCode