查询字符串相等性检查的java性能

时间:2012-05-28 04:04:08

标签: java performance list

我在列表中有一大堆字符串网址模式,例如{http://www.imdb.com,http://www.amazon.com,...}。

我得到的输入网址如下:

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

出于我的应用程序的目的,此URL实际上由http://www.imdb.com组成,因此这两者的相等应为true

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

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

现在我需要将此提取的URL与URL的主列表进行比较,并将基本URL存储在数据库中(如果找到匹配项)。所以从本质上讲,对于我的输入(基本)URL的每一个,我在主列表中寻找提取的URL的匹配,如果找到匹配,我将输入(基本)URL存储在数据库中。 / p>

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

  1. 将URL的主列表放在数组列表中,并使用数组列表contains方法
  2. 将主列表放在数据库中,并使用查询来检查输入的URL
  3. 谁能告诉我哪一个会在性能方面更好?

2 个答案:

答案 0 :(得分:4)

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

对于数据库(可能是在磁盘上?),每次查询都会产生一个可能很昂贵的数据库查找。

1000个网址格式不是很多。将列表保留在内存中并使用适当的数据结构 - HashSet可以做得很好。

答案 1 :(得分:1)

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

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