案例描述
对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
里有一个(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查找value
时,如果遇到下列情况,返回节点(里面包含value
)
1.key
的引用值与map中key的引用值相等,返回该节点。
2.key
不为空,并且key equals (节点的key)
,返回该节点。
其他关联知识
value相同的不同实例String,hashCode是相等得。
String的hashCode
网友评论