将HashMap Key Iterator转换为List Iterator

som*_*rti 5 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;
    }
...
}
Run Code Online (Sandbox Code Playgroud)

但我得到以下例外

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)
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以将HashMap Key Iterator强制转换为List Iterator来解决我的目的.任何帮助将不胜感激.

谢谢,

索姆纳特

Eug*_*sky 10

iteratoradj.keySet()不能浇铸为ListIterator,因为它的按键设定(通过返回的keySet()方法)不是一个list,而是一个Set.因此它没有订单.

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

List<Node> nodes = new ArrayList<Node>(adj.keySet());
Run Code Online (Sandbox Code Playgroud)

然后执行所需的操作.