簡體   English   中英

將HashMap Key Iterator轉換為List Iterator

[英]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來解決我的目的。 任何幫助將不勝感激。

謝謝,

索姆納特

iteratoradj.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM