0

我在列表中有一组非常大的字符串 URL 模式,例如 {http://www.imdb.com, http://www.amazon.com ,...}。

我得到这样的输入 URL:

http://www.imdb.com/title/tt1409024/

对于我的应用程序来说,这个 URL 实际上是从http://www.imdb.com形成的,所以这两个应该是相等的true

为了实现这一点,我可以从输入 URL 中提取基本 URL:

http://www.imdb.com/title/tt1409024/ => http://www.imdb.com

现在我需要将此提取的 URL 与 URL 的主列表进行比较,如果找到匹配项,则将基本 URL 存储在数据库中。因此,本质上,对于我的每个输入(基本)URL,我都在主列表中为提取的 URL 寻找匹配项,如果找到匹配项,我会将输入(基本)URL 存储在数据库中。

为了实现相等/匹配逻辑,我有两种可能的解决方案。请权衡哪个更好:

  1. 将 URL 的主列表放入数组列表中,并使用数组列表contains方法
  2. 将主列表放入数据库中,并使用查询来检查输入的 url

谁能告诉我哪一个在性能方面会更好?

4

2 回答 2

4

您的任何建议都不合适。对于 ArrayList,您必须在列表的一半(平均)中线性搜索要检查的每个 URL。

对于数据库(大概在磁盘上?),您会为每个查询招致潜在的昂贵的数据库查找。

1000 个 URL 模式并不是很多。将列表保存在内存中并使用适当的数据结构 - HashSet会做得很好。

于 2012-05-28T04:12:24.120 回答
1

如果您将站点的 url 放入HashSet中,您将获得与您的 arraylist 解决方案相同的行为,但它将是一个恒定时间查找,而不是列表长度的变量。

数据库解决方案对于您的问题可能是矫枉过正,因为开销将超过搜索效率的提高。

于 2012-05-28T04:10:55.410 回答