Entry和LinkedLists,迭代它们的最佳方式?

时间:2015-04-28 19:27:28

标签: java android linked-list

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

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

3 个答案:

答案 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