我在尝试将LinkedList强制转换为Map或HashMap时收到ClassCastException。我有以下LinkedList:
List<Entry<Integer, Integer>> list = new LinkedList<Entry<Integer, Integer>>(map.entrySet());
我正在尝试迭代这个列表,执行以下操作:
Iterator<Entry<Integer, Integer>> iter = ((Map<Integer, Integer>) list).entrySet().iterator(); // this is problematic code
if (iter.hasNext()) {
//do some stuff
}
这样做的正确方法是什么?提前谢谢!
答案 0 :(得分:3)
你不需要演员。列表的iterator
方法将根据需要返回Iterator<Entry<Integer, Integer>>
。这是因为List
类型是通用的。因此,列表中元素的类型也是Iterator
的类型参数。
另外,为了循环,您可能需要while
而不是if
:
Iterator<Entry<Integer, Integer>> iter = list.iterator();
while (iter.hasNext()) {
Entry<Integer, Integer> entry = iter.next();
//do some stuff with entry
}
或使用for
循环将Iterator
的范围限制为循环体:
for (Iterator<Entry<Integer, Integer>> iter = list.iterator(); iterator.hasNext();) {
Entry<Integer, Integer> entry = iter.next();
//do some stuff with entry
}
您也可以使用现有地图执行此操作。如果您只想迭代它们,则无需创建LinkedList
并填写所有条目:
Iterator<Entry<Integer, Integer>> iter = map.entrySet().iterator();
答案 1 :(得分:1)
您不必将列表转换为地图以进行迭代。 你可以使用这样的东西:
Iterator<Map.Entry<Integer, Integer>> iter = list.iterator();
while (iter.hasNext()) {
Map.Entry<Integer, Integer> currentEntry = iter.next();
//do some stuff
}
请注意,要遍历列表,您必须使用while循环,而不是条件运算符。
答案 2 :(得分:1)
只需使用Score
循环。创建新列表在内存和处理器方面都是低效的。
for