我有一个声明为:
的散列图HashMap<String, Double> hm = new HashMap<String, Double>();
我将Vector声明为:
Vector<String> productList = new Vector<String>();
现在,我正在尝试将密钥添加到向量中:
Set set = hm.entrySet();
// Get an iterator
Iterator i = set.iterator();
// Display elements
while(i.hasNext()) {
Map.Entry me = (Map.Entry)i.next();
//System.out.print(me.getKey() + ": ");
productList.add(me.getKey());
//System.out.println(me.getValue());
}
//hm is the HashMap holding the keys and values.
编译代码时,会出现以下错误:
ProductHandler.java:52: error: no suitable method found for add(Object)
productList.add(me.getKey());
^
method Collection.add(String) is not applicable
(argument mismatch; Object cannot be converted to String)
在尝试将值添加到向量之前,是否需要将值转换为String类型?我错过了什么吗?
答案 0 :(得分:2)
首先,您可以使用Vector(Collection<? extends E)
构造函数和Map.keySet()
调用
Vector<String> productList = new Vector<>(hm.keySet());
其次,您应该更喜欢ArrayList
1
List<String> productList = new ArrayList<>(hm.keySet());
1 除非您与多个线程共享此列表,否则使用Vector
添加同步是 cost 。 < / p>
答案 1 :(得分:1)
不要使用原始类型。
使用增强的for循环可以更简单地编写代码:
for(String key : hm.keySet()) {
productList.add(key);
}
或
for(Map.Entry<String,Double> entry : hm.entrySet()) {
productList.add(entry.getKey());
}