该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++;
}
}
Run Code Online (Sandbox Code Playgroud)
它返回对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
Run Code Online (Sandbox Code Playgroud)
你只使用一个矢量.您将矢量放入地图中,然后在下一次迭代中清除它.好吧,你刚刚清除了地图内的矢量!仅仅因为你把它放在地图上并不意味着它无法改变.
我觉得,最好的办法是为每个条目制作一个新的向量.
所以更换
t.clear();
Run Code Online (Sandbox Code Playgroud)
同
t = new Vector<String>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
262 次 |
| 最近记录: |