Entry 和 LinkedLists,遍历它们的最佳方式?

Entry and LinkedLists, best way to iterate through them?

我在尝试将 LinkedList 转换为 Map 或 HashMap 时收到 ClassCastException。我有以下链表:

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
}

这样做的正确方法是什么?提前致谢!

您不需要强制转换。列表的 iterator 方法将根据需要 return 和 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();

您不必将列表转换为地图来遍历它。 你可以只使用这样的东西:

Iterator<Map.Entry<Integer, Integer>> iter = list.iterator();
while (iter.hasNext()) {
    Map.Entry<Integer, Integer> currentEntry = iter.next();
    //do some stuff
}

请注意,要遍历列表,您必须使用 while 循环,而不是条件运算符。

仅用于 for 循环。创建新列表在内存和处理器方面都是低效的。

for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
}