繁体   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