2015-05-25 198 views
3

我試圖顯示以下的HashMap的內容:類型轉換iterator.next()方法的返回類型爲字符類

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(); 

但這不會工作。任何幫助不勝感激。 謝謝..

回答

5

的參數多和Iterator使用keySet

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

說明

  • Iterator是一個泛型類型,應該被參數。通過這種方式,您可以調用next而不必從Object投射到您想要的類型。
  • 調用entrySet將返回一個Set<Entry<Character, Integer>>,這不必要,如果你遍歷從hm.entrySet()您試圖鍵
0

你的人生複雜化得到Set<Character,Integer>Set<Character>

這是更好地使用keySet()。因爲它會返回Set<K>(這裏主要是性格讓將返回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)); 
    } 
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構造函數。它不會允許這樣做。

所有的包裝類都有構造函數,它們可以用來創建相應的Wrapper類對象,方法是傳遞一個String或一個與包裝類對應的類型相同的數據類型的變量,除了Character包裝類,其對象不能用String創建。

相關問題