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()) {
}
我在尝试将 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()) {
}