在JAVA中,如Map(String,Object>) map=new HasMap(String,Object) ;问题是这个map在内存中键值是怎样存在

如题所述

实际的实现是Map内部有两个HashSet,HashSet你可以理解为一个数组
有一个内部的辅助对象:
class Entry<String, Object>
{
private String key;
private Object value;

public int hashCode()
{
return this.key.hashCode();
}

public boolean equal(Entry<String, Object> that)
{
return this.key.equal(that.key);
}
}

这个辅助对象会将Map的Key和Value绑定在一起,但是作hashCode操作的时候却返回Key的hashCode。
内部分别用两个Set存储Key和Value,由于key.hashCode == entry.key.hashCode(),所以key和entry在两个set中的位置是相等的,这样就形成了映射的关系。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-07
Object obj = new Objict();
obj == map.get(String);

obj存的内容是 map.get(String); 的值的内存地址。
obj 和 map.get(String); 两个当中,真正的值在内存中只有一个,obj只是他的指向。
所以当另外一个变量 obj2 = map.get(String); 后,修改变量obj2,变量obj同时也做了改变。
所以当你想完全复制一个变量时,就要用到 “克隆” 了。
第2个回答  2013-03-07
此键值只是相当于一个引用,指向了堆内存中的Object
第3个回答  2013-03-07
Map(String,Object<t>),是个容器。用者可以自个定义Map存取数据方法。
相似回答