【问题标题】:How to remove elements from collection while iterating without iterator如何在没有迭代器的情况下从集合中删除元素
【发布时间】:2013-10-06 17:49:06
【问题描述】:

假设我有一个字符串列表(简化)

fullList = {a,b,c,d,a,d,c,b}

我想找到喜欢的情侣

couplesList = {{a,a},{b,b}, ...}

我目前处理这个问题的方式是

  1. 获取第一个元素
  2. 使用 guava 谓词找到合适的对象
  3. 现在怎么办?

我最终有 2 个对象 {a,a} 但我无法将它们从 fullList 中删除,因为我没有使用“迭代器”风格的迭代(因为我使用的是 Guava 谓词它不会无论如何都不起作用 - 因为我没有指向 Itarables.find(...) 函数找到的元素的迭代器指针)。

我也想以“高效”的方式来做,所以我想避免多个嵌套循环等。

任何想法如何更正确/有效地解决这个问题?我有点卡住了。

【问题讨论】:

  • 你知道Iterators.find 是一个嵌套循环吗?在没有理解的情况下使用 Guava collections api非常很危险。
  • @BoristheSpider 好……好点。

标签: java collections guava


【解决方案1】:

我将为每个元素创建一个频率计数。在 Guava 术语中,这是一个 MultiSet。从中,您可以创建一对集合,以及另一个单打集合。这可以通过原始列表的一遍和频率计数图的一遍来完成。即 O(n)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-13
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多