将iterator.next()方法的返回类型类型转换为Character类

时间:2015-05-25 10:53:33

标签: java hashmap

我正在尝试显示以下HashMap的内容:

 HashMap<Character,Integer> hm = new HashMap<Character,Integer>();

我使用以下方法打印出内容:

Set hmset = hm.entrySet();
Iterator iterator = hmset.iterator();
while(iterator.hasNext())
    {
    Character key = new Character(iterator.next());
    System.out.println("key : "+key+"value : "+(Integer)hm.get(key));
}

我收到以下错误:

error: constructor Character in class Character cannot be applied to given types;

我也尝试了以下类型转换方式:

Character key = (Character)iterator.next();

但那也行不通。任何帮助非常感谢。 感谢..

3 个答案:

答案 0 :(得分:7)

参数化您的Iterator并使用keySet

Iterator<Character> iterator = hm.keySet().iterator();

<强>解释

  • Iterator是泛型类型,应该进行参数化。这样,您无需从next转换为所需类型即可调用Object
  • 调用entrySet将返回Set<Entry<Character, Integer>>,如果您正在重复密钥,则会使您的生活变得更加复杂

答案 1 :(得分:0)

hm.entrySet()开始,您试图Set<Character,Integer>而不是Set<Character>

使用keySet()会更好。因为它将返回Set<K>(此处Key为Character。所以将返回Set<Character>):

Set hmset = hm.keySet();
    Iterator<Character> iterator = hmset.iterator();
    while(iterator.hasNext())
        {
        Character key = new Character(iterator.next());
        System.out.println("key : "+key+"value : "+(Integer)hm.get(key));
    }

答案 2 :(得分:0)

尝试使用此代码

  Iterator it = hm.entrySet().iterator();
     while (it.hasNext()) {
            Map.Entry entry = (Map.Entry) it.next();
            Character key = (Character)entry.getKey();
            Integer value = (Integer)entry.getValue();
         System.out.println("key : "+key+"value : "+(Integer)hm.get(key));
        }

为什么你在这一行Character key = new Character(iterator.next());收到错误? 。您正在将int值传递给Character Wrapper Class构造函数。它不允许这样做。

所有包装类都有构造函数,可以通过传递一个String或一个与包装类对应的类型相同的数据类型的变量来创建相应的Wrapper类对象,除了Character包装器无法使用String创建其对象的类。