2012-03-25 3 views
3

いくつかの比較を行うために、prevポインタとcurrポインタを持つリンクリストのようにHashMapキー要素にアクセスする必要があります。私はHashMapキーイテレータからリストイテレータへの型キャストを行って、現在のキー要素と以前のキー要素にアクセスしました。以下のコードHashMapキーイテレータからリストイテレータへのキャスト

HashMap<Node,Double> adj; 
ListIterator<Node> li = (ListIterator<Node>) adj.keySet().iterator(); 

while (li.hasNext()) { 
    if (li.hasPrevious()) { 
       prev = li.previous(); 
    } else { 
       prev = null; 
    } 
... 
} 

あるしかし、私は

Exception in thread "main" java.lang.ClassCastException: java.util.HashMap$KeyIterator cannot be cast to java.util.ListIterator 
at Types$AdjList.makeConnected(Types.java:357) 
at Main.main(Main.java:89) 

以下の例外を取得しています、私は私の目的を解決するためのイテレータをリストにHashMapのキーIteratorを型キャストすることができますいくつかの方法があります。どんな助けもありがとう。

おかげで、

Somnath

答えて

9

そのキーが設定されているためadj.keySet()iteratorListIteratorにキャストすることができない(keySet()によって返さ)メソッドがlistないが、Set。したがって、注文はありません。

あなたは、この目的のためにLinkedHashMapを使用するか、keySet

このような
List<Node> nodes = new ArrayList<Node>(adj.keySet()); 

から新しいListインスタンスを作成し、目的の操作を実行しようとすることができます。

0

これを試してみてください。..

HashMap<Node,Double> adj; 
Iterator<Node> li = (Iterator<Node>) adj.keySet().iterator(); 

while (li.hasNext()) { 
    if (li.hasPrevious()) { 
       prev = li.previous(); 
    } else { 
       prev = null; 
    } 
... 
} 
0
public HashMap JsonToMap(JSONObject js,HashMap hm){ 
     @SuppressWarnings("unchecked") 
     Iterator<String> nameItr = js.keySet().iterator(); 
     while(nameItr.hasNext()) { 
      String name = nameItr.next(); 
      hm.put(name, js.get(name).toString()); 
     } 
     return hm; 
    } 
関連する問題