将HashMap键值(String)转换为Vector <string>?

时间:2016-04-02 02:34:27

标签: java vector hashmap

我有一个声明为:

的散列图
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类型?我错过了什么吗?

2 个答案:

答案 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());
  }