【问题标题】:Entry and LinkedLists, best way to iterate through them?条目和链接列表,遍历它们的最佳方式?
【发布时间】:2015-04-28 19:27:28
【问题描述】:

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

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

【问题讨论】:

  • 你可以只迭代列表,从你有限的代码我看不出需要地图,你要做的就是迭代一个列表for (Entry&lt;Integer, Integer&gt; e : list){ e.getKey() ; e.getValue(); }
  • 你为什么要使用LinkedListfor (Map.Entry&lt;Integer, Integer&gt; entry : map.entrySet()) 怎么了?
  • 我正在使用 LinkedList 来维护秩序
  • @portfoliobuilder 我还是不明白。你能更广泛地了解你正在尝试做什么吗?
  • linkedList 包含一个特定的整数模式,我希望按照该模式维护以供以后使用。然后,我尝试使用此模式创建其他模式,但在迭代时卡住了。

标签: java android linked-list


【解决方案1】:

你不需要演员表。列表的iterator 方法将根据需要返回Iterator&lt;Entry&lt;Integer, Integer&gt;&gt;。这是因为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();

【讨论】:

  • for 循环是首选,因为它限制了迭代器的范围
【解决方案2】:

您不必将列表转换为地图即可对其进行迭代。 你可以使用这样的东西:

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-01
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      相关资源
      最近更新 更多