【问题标题】:Casting HashMap Key Iterator to List Iterator将 HashMap 键迭代器转换为列表迭代器
【发布时间】:2017-03-20 20:00:49
【问题描述】:

我需要访问 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 来解决我的目的。任何帮助将不胜感激。

谢谢,

索姆纳特

【问题讨论】:

    标签: java collections


    【解决方案1】:

    adj.keySet()iterator 不能转换为 ListIterator,因为它的键集(keySet()返回)方法不是list,而是@987654326 @。因此它没有订单。

    您可以尝试为此使用LinkedHashMap,或者像这样从keySet 创建一个新的List 实例

    List<Node> nodes = new ArrayList<Node>(adj.keySet());
    

    然后执行所需的操作。

    【讨论】:

      【解决方案2】:

      试试这个..

      HashMap<Node,Double> adj;
      Iterator<Node> li = (Iterator<Node>) adj.keySet().iterator();
      
      while (li.hasNext()) {
          if (li.hasPrevious()) {
                      prev = li.previous();
          } else {
                      prev = null;
          }
      ...
      }
      

      【讨论】:

        【解决方案3】:
            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;
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-04-24
          • 2016-12-14
          • 2020-05-18
          • 2011-03-24
          • 2011-09-02
          • 2012-10-11
          • 1970-01-01
          相关资源
          最近更新 更多