Map#get
方法是返回键映射到的值,还是返回对该值的引用?代码(这是我正在开发的一个程序):
Map<String,Vector<String>> map=new TreeMap<String,Vector<String> >();
for(String line:services)
{
String[] set=line.split(" ");
Vector<String> t=new Vector<String>();
String BioService=set[0];
int i=1;
while(i<set.length)
{
t.clear();
if(map.containsKey(set[i]))
t=map.get(set[i]);
t.addElement(BioService);
map.put(set[i],t);
/*if i put t.clear() here i get null values in my output*/
i++;
}
}
它返回对Object的引用。
在Java中,你永远不会有真正的Object,只有对它的引用
您确实有实际的基本体(不能引用基本体,只能引用包裹基本体的对象或类似的对象),但当然基本体不能放入地图中,只有对象可以。
假设您有以下代码:
Map<String,Vector<String>> map = new HashMap... // etc
Vector<String> vec = new Vector<String>();
vec.addElement("foo");
map.put("foo",vec);
vec.clear();
vec.addElement("bar");
map.put("bar",vec);
Vector<String> ret = map.get("foo");
System.out.println(ret.get(0)); // prints bar
你只能使用一个向量。你把向量放进地图,然后在下一次迭代中清除它。好吧,你刚刚清除了地图内的向量!仅仅因为你把它放在地图上并不意味着它不能改变。
我觉得,你最好的办法是为每个条目制作一个新的向量。
所以更换
t.clear();
带有
t = new Vector<String>();
所有非基元类型都作为Java中的引用进行处理。因此,get
方法将返回对映射项的引用。