java - 将 HashMap 键迭代器转换为列表迭代器

标签 java collections

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

谢谢,

桑纳特

最佳答案

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

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

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

然后执行所需的操作。

关于java - 将 HashMap 键迭代器转换为列表迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9857673/

相关文章:

java - 配置 bazel 使用特定 JVM 版本构建/测试

java - Elasticsearch Mustache 可选参数

java - Socket clientSocket = serverSocket.accept();无法解决

c++ - C++ Map中如何使用自定义结构

java - 如何检查变量是否引用 "this"集合中的元素?

多个目录的 javac -classpath 问题

java - 在java中使用JPanel时,如何将一个类中的用户输入数据显示到另一个类中

java - 在 Java 中创建、搜索和修改(key、value1、value2)的最佳方式

java - 为什么Map有loadFactor而List没有呢?

WPF:无法在 XAML 中设置只读集合的​​项目