[英]Casting HashMap Key Iterator to List Iterator
我需要訪問HashMap關鍵元素,就像使用prev和curr指針進行一些比較的鏈表一樣。 我將HashMap Key Iterator類型化為List Iterator來訪問當前和以前的關鍵元素。 下面是代碼
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 Key Iterator強制轉換為List Iterator來解決我的目的。 任何幫助將不勝感激。
謝謝,
索姆納特
該iterator
的adj.keySet()
不能被澆鑄為ListIterator
,因為它的按鍵設定( 通過返回keySet()
方法)不是一個list
,而是一個Set
。 因此它沒有訂單。
您可以嘗試使用LinkedHashMap
來實現此目的,或者像這樣從keySet
創建一個新的List
實例
List<Node> nodes = new ArrayList<Node>(adj.keySet());
然后執行所需的操作。
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;
}
嘗試這個..
HashMap<Node,Double> adj;
Iterator<Node> li = (Iterator<Node>) adj.keySet().iterator();
while (li.hasNext()) {
if (li.hasPrevious()) {
prev = li.previous();
} else {
prev = null;
}
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.