【问题标题】:What is an efficient "contains this element" list?什么是有效的“包含此元素”列表?
【发布时间】:2012-11-09 16:16:54
【问题描述】:

好的,这是我的问题:我从网上下载了一个项目列表,并将它们存储在一个数据库中。 在连续下载中,一个项目不再存在,例如:

第一次下载: 项目1 项目2 项目3

第二次下载: 项目1 项目3

在这种情况下,我必须检测到 item2 不再存在,因此也将其从数据库中删除。

我想维护一个数据库项目列表,并为我下载的每个项目调用它的“包含”方法......但我想以最有效的方式做到这一点,所以我问的是其中的哪一个java 实现对我的问题是最好的。 请注意,每个项目都有一个唯一的 id,因此列表将只包含字符串。

【问题讨论】:

  • 如果检测的最终目标只是将其从数据库中删除,那么为什么不能从数据库中删除所有现有值并插入新值?这要简单得多。

标签: java


【解决方案1】:

HashSet 的查找性能比列表好得多。
(如果您需要保留广告订单,请改用LinkedHashSet。)

【讨论】:

  • 当从 List 更改为 HashSet 时,可能值得注意的是它并不关心其中项目的顺序。
  • 没错。如果顺序很重要,请使用 LinkedHashSet。
【解决方案2】:

...以最有效的方式...

使用数据库。

为什么不在数据库中使用时间戳?

当您下载新项目时,您可能无论如何都必须更新数据库(如果某些属性发生更改),因此您还可以更新所有下载项目的时间戳。

之后,您可以从数据库中删除时间戳早于下载的所有项目。所以没有必要在内存中保存完整的新旧集合并进行查找,让数据库来处理(它可以更高效)。

保存时间戳的开销很小,您甚至可以使用类似数字的东西,每次运行例程时都会增加一次。

【讨论】:

    【解决方案3】:

    如果您的下载没有多次出现,我建议您使用HashSet。如果您打算稍后使用对象,请确保这些对象覆盖 hashcode 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-06
      • 1970-01-01
      相关资源
      最近更新 更多