[英]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来解决我的目的。 任何帮助将不胜感激。
谢谢,
索姆纳特
该iterator
的adj.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.